Unity实现按键开门系统遭遇CS0120错误求助
解决Unity报错CS0120:调用非静态方法需要对象引用
你遇到的error CS0120是因为直接用DoorBehaviour.OpenDoor()调用了非静态方法——非静态方法必须通过类的实例对象才能调用,不能直接用类名触发。
修改方案
- 在
SwitchBehaviour脚本里添加DoorBehaviour类型的引用字段,用来关联场景里的门对象:[SerializeField] private DoorBehaviour targetDoor; // 新增门引用字段 - 修改
PerformPress方法,通过实例调用OpenDoor,同时加空引用检查避免额外报错:private void PerformPress(InputAction.CallbackContext obj) { if(targetDoor != null) { targetDoor.OpenDoor(); } } - 回到Unity编辑器,选中挂了
SwitchBehaviour的开关对象,在Inspector面板里把场景中挂有DoorBehaviour的门对象拖到Target Door字段上。
完整修改后的代码
using UnityEngine; using UnityEngine.InputSystem; public class SwitchBehaviour : MonoBehaviour { [SerializeField] private InputActionReference press; [SerializeField] private DoorBehaviour targetDoor; // 关联目标门 private void OnEnable() { press.action.performed += PerformPress; } private void PerformPress(InputAction.CallbackContext obj) { if(targetDoor != null) { targetDoor.OpenDoor(); } } private void OnDisable() { press.action.performed -= PerformPress; } }
内容的提问来源于stack exchange,提问作者Skibi OS
相关产品推荐
相关产品推荐

