Unity3D - 尽管我在检查器上设置了什么,为什么变量始终为真?

我已将变量设置为 SerializeField 以从检查器中选择值。然而,这个值并没有改变,它始终是一个“真”值。


我试过将其公开、更改名称、重新导入组件、重置组件……似乎没有任何效果,唯一起作用的是更改 Awake 方法中的值。


public class AudioController : MonoBehaviour

{


    [SerializeField] private bool playSoundsAtColision; //WHY IS TRUE??? Is false in the inspector...


    private void OnCollisionEnter2D(Collision2D collision)

    {

        if (this.playSoundsAtColision)

            Debug.Log("playSoundsAtColision = " + this.playSoundsAtColision + " by: " + gameObject.name, gameObject);

    }

}



在这里你有整个代码的图像:https ://i.imgur.com/rT5BdhT.png (你可以看到变量只被声明,然后检查和打印并且没有其他任何地方可以访问它)


尽管我在检查器上设置了什么,但这里会发生什么:https ://i.imgur.com/FLFugq8.png


提前谢谢你的帮助!


千巷猫影
浏览 67回答 2
2回答

郎朗坤

检查是否:您在游戏独立运行时挂起属性 - 当您退出独立运行时,属性会重置您没有在代码中设置属性。要更改布尔值 (true) 的默认值,您需要为字段 playSoundsAtColision 设置一个值:public class AudioController : MonoBehaviour {    [SerializeField] public bool playSoundsAtColision = false; //you just shoud change the variable to public and default value to false or true    private void OnCollisionEnter2D(Collision2D collision)    {        if (this.playSoundsAtColision)            Debug.Log("playSoundsAtColision = " + this.playSoundsAtColision + " by: " + gameObject.name, gameObject);    }}

慕沐林林

问题是该组件存在多次。我检查过预制件没有两个重复的组件,但预制件变体有。我还在习惯它。正如 AresCaelum 所说,使用“DisallowMultipleComponent”属性应该有助于避免此类问题。
打开App,查看更多内容
随时随地看视频慕课网APP