C# 设定武器的射速-单位
我刚刚开始尝试在Unity中开发一款游戏,并且只有大约7个月的编码经验,所以如果有任何帮助,我将不胜感激 正如标题所说,我试图在这个游戏中设置武器的射击速度,这是我的代码C# 设定武器的射速-单位,c#,unity3d,C#,Unity3d,我刚刚开始尝试在Unity中开发一款游戏,并且只有大约7个月的编码经验,所以如果有任何帮助,我将不胜感激 正如标题所说,我试图在这个游戏中设置武器的射击速度,这是我的代码 { [SerializeField] private GameObject _arrowPrefab; [SerializeField] private float _fireRate = 1f; [SerializeField] private bool allowFire =
{
[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,例如,您不希望在游戏开始时允许武器开火。谢谢!马上修好了。我以后会记住这一点。谢谢!我感谢你的迅速反应。这些信息在未来将非常有用。