在多个脚本中使用相同的布尔值Unity

时间:2018-12-20 15:38:22

标签: c# unity3d

我试图让玩家找到钥匙后就打开门 当前“ hasKey”值正在管理玩家是否具有正确或错误的密钥。我现在需要知道如何在另一个脚本中使用此“ hasKey”布尔值;我已经尝试了几个小时,却无处可寻,所以我将代码发布在下面,也许有人知道发生了什么事,谢谢!!

    using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class Detection : MonoBehaviour {

    public GameObject objectToEnable;
    public static bool Enabled = false;
    public bool hasKey = false;
    public DoorOpener _DoorOpener;


    private void Update()
    {
        Debug.Log(hasKey);
        if (Enabled)
        {
            objectToEnable.SetActive(true);
        }
    }



    void OnMouseEnter()
    {

        Debug.Log("Enter");
    }

     void OnMouseExit()
    {
        Debug.Log("Exit");
    }

     void OnMouseUp()
    {
        Enabled = true;
        hasKey = true;
        Debug.Log("Pressed");
    }

}





public class DoorOpener : MonoBehaviour
{

    Animator animator;
    bool JailDoorOpen;


    public Detection _Detection;

    void Start()
{

    JailDoorOpen = false;
    animator = GetComponent<Animator>();
 }



    void OnTriggerEnter(Collider JailDoorO)
    {
        if ((JailDoorO.gameObject.tag == "Player") && (_Detection.hasKey == true))
        {
            Debug.Log("Open Door");
            JailDoorOpen = true;
            jDoors("Open");
        }

    }


    void jDoors (string direction)
    {
        animator.SetTrigger(direction);

        }

}

    enter code here

2 个答案:

答案 0 :(得分:0)

如果这是本地多人游戏,则可以将布尔值存储在door对象上。您也可以将其存储在KeyManager中,并通过静态变量进行访问。

如果这是网络多人游戏,则必须将变量存储在某个位置的管理器中,并在该布尔状态改变时更新每个客户端。

答案 1 :(得分:0)

在第二个脚本中,您已经声明:

public Detection _Detection;

但是您还没有说_Detection被分配了什么。因此,它只是检测脚本的空白实例。您需要引用附加到要查找的特定对象的脚本。 例如,如果Detection和DoorOpener都在同一个游戏对象上,那么您将要做。

_Detection = gameObject.getComponent<Detection>();

否则您可以做类似...

_Detection = GameObject.FindWithTag('TagOfObjWithDetScript').getComponent<Detection>();

现在DoorOpener中的haskey的值与您正在使用的检测脚本的特定实例中的haskey的值相匹配。