Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设定武器的射速-单位_C#_Unity3d - Fatal编程技术网

C# 设定武器的射速-单位

C# 设定武器的射速-单位,c#,unity3d,C#,Unity3d,我刚刚开始尝试在Unity中开发一款游戏,并且只有大约7个月的编码经验,所以如果有任何帮助,我将不胜感激 正如标题所说,我试图在这个游戏中设置武器的射击速度,这是我的代码 { [SerializeField] private GameObject _arrowPrefab; [SerializeField] private float _fireRate = 1f; [SerializeField] private bool allowFire =

我刚刚开始尝试在Unity中开发一款游戏,并且只有大约7个月的编码经验,所以如果有任何帮助,我将不胜感激

正如标题所说,我试图在这个游戏中设置武器的射击速度,这是我的代码

{
    [SerializeField]
    private GameObject _arrowPrefab;
    [SerializeField]
    private float _fireRate = 1f;
    [SerializeField]
    private bool allowFire = false;


    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        fireArrow(); 
    }

    public void fireArrow()
    {
        if (Input.GetMouseButton(0) && allowFire)
        {
            StartCoroutine(FireRate());
        }

        IEnumerator FireRate()
        {
            allowFire = false;
            Instantiate(_arrowPrefab, transform.position, Quaternion.identity);
            yield return new WaitForSeconds(_fireRate);
            allowFire = true;
        }
    }


}
所以如果我按原样运行代码,武器就不会开火。如果我选中Unity引擎中的allowFire框并将布尔值设置为true,它将按预期间隔1秒触发。但是如果我回到代码中,一开始将布尔值设置为true,武器就不会开火


我假设我遗漏了一些小东西,但我的搜索结果只是找到了与我的代码完全相同的代码。

Inspector正在与您玩:

公共字段自动序列化,私有allowFire由[SerializeField]序列化,因此它在Inspector中公开,正如您已经注意到的,您可以在Inspector中更改值

Unity将记住脚本false中的第一个值,并将其保存在Inspector中序列化。这非常有用,尤其是当您有多个游戏对象时,因为您可以独立于脚本中的值设置不同的值

这意味着,您可以在代码中将变量更改为true,但Inspector将使用序列化值覆盖/替换该变量

您有多种选择:

在“开始”中将该值设置为true 单击脚本组件检查器右侧的3个点,然后选择“重置” 当游戏未运行时,只需勾选复选框,即可使Unity序列化真实状态。 很多人都爱上了这一点。请记住:公共/序列化字段上的代码更改将被Inspector替换,并且看起来更改代码没有任何作用。

您的allowFire布尔值正在序列化

这意味着Unity Editor缓存了该字段的值,并将其用作默认值,而不考虑构造函数或类中的默认值将这些字段设置为什么


这是需要的行为,因为您可能故意将该值设置为false,例如,您不希望在游戏开始时允许武器开火。

谢谢!马上修好了。我以后会记住这一点。谢谢!我感谢你的迅速反应。这些信息在未来将非常有用。