为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
千巷猫影 2022-12-24 14:22:43
我已将变量设置为 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提前谢谢你的帮助!
查看完整描述

2 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

检查是否:


您在游戏独立运行时挂起属性 - 当您退出独立运行时,属性会重置

您没有在代码中设置属性。要更改布尔值 (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);

    }

}


查看完整回答
反对 回复 2022-12-24
?
慕沐林林

TA贡献2016条经验 获得超9个赞

问题是该组件存在多次。

我检查过预制件没有两个重复的组件,但预制件变体有。我还在习惯它。

正如 AresCaelum 所说,使用“DisallowMultipleComponent”属性应该有助于避免此类问题。


查看完整回答
反对 回复 2022-12-24
  • 2 回答
  • 0 关注
  • 63 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信