你可以通过以下步骤来实现此功能:

  1. 在该对象上实例化一个新的脚本,例如“门”脚本(DoorScript),其中包含该对象的特定逻辑。
  2. 在对象的Interactable脚本中,创建一个新的UnityEvent字段,以便于绑定这个门脚本。
  3. 在Interactable脚本的Interact方法中,调用GateScript的相关方法(例如Open门)。

门脚本(GateScript)如下:

public class GateScript : MonoBehaviour
{
    [SerializeField] private bool isConnected = true; // 检测门是否已经连接
    [SerializeField] private float speed = 1f; // 检测门移动速度
    public bool IsConnected => isConnected;
    public float Speed => speed;

    public void Open()
    {
        // 启动门的移动动画
    }

    public void Close()
    {
        // 关闭门,禁止通过
    }
}

在交互脚本中(ObjectInteractions),通过检测门脚本中的“IsConnected”属性来判断该门当前的状态,并控制进入/离开动画。

public class ObjectInteractions : MonoBehaviour
{
    public void Test()
    {
        // 获取门脚本
        GateScript gateScript = interactable.GetComponent<GateScript>();
        // 检测门的原始状态
        bool isOriginalState = gateScript.IsConnected;

        // 开启门
        gateScript.Open();

        // 如果门是连接状态(未开),则提示玩家提示要开门
        if (!isOriginalState)
        {
            // 给玩家提示
            dialogueText.text = "<i>开门</i>";
        }
        else
        {
            // 如果门是连接状态(开),则提示玩家提示要关门
            dialogueText.text = "<i>关门</i>";
        }
    }
}

当玩家交互时,会调用GateScript的Open/Close方法。根据门的原始状态来判定是开门还是关门。