Unity脚本间布尔值传递问题求助:代码未正常输出布尔值
问题解决方法
核心错误:局部变量覆盖了成员变量
你的sender脚本里,OnTriggerEnter方法内的bool ktp = true;是重新声明了一个局部变量,和类顶部的public bool ktp不是同一个。也就是说,你修改的只是临时的局部变量,类的成员变量ktp根本没被更新,接收脚本自然读不到正确的值。
修正步骤
修改sender脚本
把OnTriggerEnter里的代码改成直接赋值给成员变量,去掉前面的bool关键字:using System.Collections; using System.Collections.Generic; using UnityEngine; public class sender : MonoBehaviour { public bool ktp; void OnTriggerEnter(Collider other) { if (other.CompareTag("Player")) { ktp = true; // 直接修改类的成员变量,不再声明局部变量 } } void Start() { } void Update() { } }确保接收脚本的引用正确
在Unity编辑器中,找到挂载empfänger脚本的物体,在Inspector面板里把挂载了sender脚本的游戏对象拖拽到script变量的赋值框里,确保引用不为空。检查触发器触发条件
- 挂载
sender的物体必须带有Collider组件,并且勾选Is Trigger选项; - 标有"Player"标签的物体必须带有Collider组件,同时要有Rigidbody组件(即使勾选
Is Kinematic也可以,否则触发器事件不会触发)。
- 挂载
可选优化:避免重复打印
你的接收脚本当前在Update里每帧都会判断并打印,等ktp为true后会持续刷控制台。可以改成只打印一次:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class empfänger : MonoBehaviour { public sender script; private bool hasPrinted = false; void Update() { if (script.ktp == true && !hasPrinted) { Debug.Log(script.ktp); hasPrinted = true; } } }
内容的提问来源于stack exchange,提问作者yourlocalgermanalcoholic
相关产品推荐
相关产品推荐

