You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity实现按键开门系统遭遇CS0120错误求助

解决Unity报错CS0120:调用非静态方法需要对象引用

你遇到的error CS0120是因为直接用DoorBehaviour.OpenDoor()调用了非静态方法——非静态方法必须通过类的实例对象才能调用,不能直接用类名触发。

修改方案

  1. 在SwitchBehaviour脚本里添加DoorBehaviour类型的引用字段,用来关联场景里的门对象:
    [SerializeField] private DoorBehaviour targetDoor; // 新增门引用字段
    
  2. 修改PerformPress方法,通过实例调用OpenDoor,同时加空引用检查避免额外报错:
    private void PerformPress(InputAction.CallbackContext obj)
    {
        if(targetDoor != null)
        {
            targetDoor.OpenDoor();
        }
    }
    
  3. 回到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 15:02:36