Unity 不会在任何组件和任何项目中运行我的 c# 脚本。它虽然读取所有值

Posted

技术标签:

【中文标题】Unity 不会在任何组件和任何项目中运行我的 c# 脚本。它虽然读取所有值【英文标题】:Unity doesn't run my c# scripts in any component and in any project. It reads all the values though 【发布时间】:2018-03-12 10:56:10 【问题描述】:

我是统一的新手,我正在处理一个问题。 Unity 不会在任何组件和任何项目中运行我的 c# 脚本。尽管 unity 从脚本中读取所有值,但它不会按预期执行游戏。在脚本组件上,它显示脚本已禁用,如以下屏幕截图所示。我可能应该提到游戏运行良好,直到这个问题不知从何而来。我不认为这是脚本的问题,因为即使在完全空的脚本上也会发生这种情况。 This is the script componentEmpty c# script with the same problem。我曾尝试重新安装 unity 2 次(没有任何反应)。我试图重新导入所有脚本(没有任何反应)。我试图重新导入所有资产(没有任何反应)。任何帮助将非常感激。 This is the whole scene

这是整个脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class Boundary

    public float xMin, xMax, zMin, zMax;
    

public class PlayerController : MonoBehaviour

    public float speed;
    public float tilt;
    public Boundary boundary;
    private Rigidbody rb;
    void Start()
    
        rb = GetComponent<Rigidbody>();
    

    public GameObject shot;
    public Transform shotSpawn;
    public float fireRate;
    private float nextFire;
    void Update()
    
        if (Input.GetButton("Fire1") && Time.time > nextFire)
        
            nextFire = Time.time + fireRate;
            Instantiate(shot, shotSpawn.position, shotSpawn.rotation);
            GetComponent<Audiosource>().Play();
        
    

    private void FixedUpdate()
    
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
        rb.velocity = movement * speed;

        rb.position = new Vector3
            (
            Mathf.Clamp(rb.position.x, boundary.xMin, boundary.xMax),
            0.0f,
            Mathf.Clamp(rb.position.z, boundary.zMin, boundary.zMax)
            );
        rb.rotation = Quaternion.Euler(0.0f, 0.0f, rb.velocity.x * -tilt);
    



This is the screenshot

【问题讨论】:

我们可以看看你的脚本吗? 脚本实际上并没有被禁用,在这种情况下,勾号不会出现。你能把你的场景截图分享给选择了脚本的游戏对象吗?还有整个脚本? 请看下面 好的,已经做到了:) 糟糕,我们丢失了场景屏幕截图的链接。您可以在此处添加评论。关于您的问题,您确定编辑器中的控制台绝对没有错误吗? 【参考方案1】:

首先 - 脚本嵌入了输入管理器(项目设置/输入)有一个名为“Fire1”的轴的假设。虽然默认情况下这是正确的,但我已经看到它发生了变化(通常通过 3rd 方脚本),所以请验证您的项目中是否有该轴。您可以尝试创建一个新项目并将您的脚本放在那里。

其次,我不确定你是否对刚体做正确的事情,你似乎是手动改变它的位置,所以你有效地覆盖了你之前要求的任何计算(通过设置速度),你应该选择一种方法并坚持下去,即在刚体上勾选“isKinematic”并手动控制其位置,或者只信任 PhysiX 并修改速度(对我来说更有意义)。在很多情况下,混合方法会产生一些意想不到的结果,在这种情况下它会起作用,但并不完全符合预期

【讨论】:

【参考方案2】:

我不确定您的代码到底有什么问题,但如果问题出在您的 FixedUpdateMethod 上,那是因为您更改了该方法的访问级别。

This is a link explaining the why you can't change access levels when overriding a method.

Unity 的 API 在默认访问级别具有 FixedUpdate(),因此请尝试将其更改为私有。

应该是这样的:

public class PlayerController : MonoBehaviour

    public float speed;
    public float tilt;
    public Boundary boundary;
    private Rigidbody rb;
    void Start()
    
        rb = GetComponent<Rigidbody>();
    

    public GameObject shot;
    public Transform shotSpawn;
    public float fireRate;
    private float nextFire;
    void Update()
    
        if (Input.GetButton("Fire1") && Time.time > nextFire)
        
            nextFire = Time.time + fireRate;
            Instantiate(shot, shotSpawn.position, shotSpawn.rotation);
            GetComponent<AudioSource>().Play();
        
    

   void FixedUpdate() //no longer has private keyword appended to method
    
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
        rb.velocity = movement * speed;

        rb.position = new Vector3
            (
            Mathf.Clamp(rb.position.x, boundary.xMin, boundary.xMax),
            0.0f,
            Mathf.Clamp(rb.position.z, boundary.zMin, boundary.zMax)
            );
        rb.rotation = Quaternion.Euler(0.0f, 0.0f, rb.velocity.x * -tilt);
    



【讨论】:

【参考方案3】:

遇到同样的问题,花了一段时间才找到解决方案 您可能会在统一调试控制台中暂停错误,如果有任何错误,它会暂停脚本的执行,这里有一个标签为“错误暂停”的选项卡。如果它被突出显示,请单击它以禁用它

【讨论】:

以上是关于Unity 不会在任何组件和任何项目中运行我的 c# 脚本。它虽然读取所有值的主要内容,如果未能解决你的问题,请参考以下文章

Vue 组件中的关键事件不会触发

源代码树 Unity 项目 Ghost 文件

Unity 引擎:哪个组件称为运行脚本? [复制]

带有 Unity 的 Google Play 服务 - 登录没有任何结果

使用 Forever 运行我的 Node 应用程序不会记录任何输出

React Redux 不会重置某些组件的存储