Использование одного и того же логического значения в нескольких скриптах Unity - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь разрешить игрокам открыть дверь, как только они найдут ключ. Значение 'hasKey' в настоящее время управляет, если у игроков есть ключ со значением true или false.теперь мне нужно знать, как использовать это логическое значение 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 голосов
/ 20 декабря 2018

Во втором сценарии вы объявили:

public Detection _Detection;

, но не сказали, для чего назначено _Detection.Так что это просто пустой экземпляр вашего сценария обнаружения.Вам нужно сослаться на скрипт, который прикреплен к конкретному объекту, который вы ищете.Например, если Detection и DoorOpener находятся на одном и том же игровом объекте, вы бы это сделали.

_Detection = gameObject.getComponent<Detection>();

или иначе вы могли бы сделать что-то вроде ...

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

теперь значение haskey в DoorOpener совпадает со значением haskey в конкретном экземпляре сценария обнаружения, который вы используете.

0 голосов
/ 20 декабря 2018

Если это локальная многопользовательская игра, вы можете хранить логическое значение на объекте двери.Вы также можете сохранить его в KeyManager и получить к нему доступ через статическую переменную.

Если это сетевая многопользовательская игра, вам придется хранить переменную в менеджере и обновлять каждого клиента.когда состояние этого логического изменяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...