Unity跨脚本访问变量报错:‘alive不存在于当前上下文’求助
问题解决:"alive不存在于当前上下文"错误
错误原因
你在Start()方法里直接给alive赋值,但没有在类的全局作用域下声明这个变量。alive此时只是Start()方法内的临时变量,出了这个方法后就无法被其他方法(比如OnTriggerStay2D)访问,所以会报这个错误。
解决步骤
- 在类的顶部(所有方法之外)声明
PaddleScript类型的成员变量alive,让整个类的方法都能访问它。 - 可选优化:添加空值判断,防止找不到标签为"Paddle"的对象时触发空引用错误。
修改后的完整代码
using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { // 在这里声明类成员变量,作用域覆盖整个类 private PaddleScript alive; void Start() { // 找到对象并赋值给成员变量 GameObject paddleObj = GameObject.FindGameObjectWithTag("Paddle"); if (paddleObj != null) { alive = paddleObj.GetComponent<PaddleScript>(); } else { Debug.LogError("找不到标签为Paddle的对象!"); } } void OnTriggerStay2D(Collider2D collider) { // 先判断alive不为空,再访问它的变量 if (Input.GetKeyDown(KeyCode.Space) && collider.CompareTag("Paddle") && alive != null && alive.paddleIsAlive) { // Do something } } }
额外提示
- 用
collider.CompareTag("Paddle")比直接比较tag属性更高效,而且能避免拼写错误导致的问题。 - 建议把
Input.GetKeyDown("space")换成Input.GetKeyDown(KeyCode.Space),这是更规范的写法,避免字符串拼写问题。
内容的提问来源于stack exchange,提问作者Fireandice
相关产品推荐
相关产品推荐

