Переменные проблемы совместного использования файлов между файлами в c # - PullRequest
0 голосов
/ 28 января 2019

У меня проблемы с поиском, как делить переменные между различными файлами C #.Я относительно новичок в кодировании на этом языке, и я не знаю, как получить доступ к логическому значению из одного файла в другом.

Я могу предоставить код при необходимости, я использую единицу, если это имеет значение.Мне говорят, что переменная не существует в текущем контексте.спросить, нужна ли дополнительная информация, я не знаю, что вам нужно, чтобы ответить на этот вопрос.

это первый файл

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



public class floorAndWallCheck : MonoBehaviour {
    public bool isGrounded = false;

    public void OnTriggerEnter2D(Collider2D floor){
        if (floor.tag == "floor") {
            isGrounded = true;
        }else {
            isGrounded = false;
        }
    }
}

это несколько строк из второго файла

void Update () {
    //left
    if (Input.GetKey("a")) {
        player1.transform.Translate(Vector3.left * Time.deltaTime * speed);
    }
    //right
    if (Input.GetKey("d")) {
        player1.transform.Translate(Vector3.right * Time.deltaTime * speed);
    }
    //up
    if (Input.GetKey("w") && isGrounded == true) {
        player1.transform.Translate(Vector3.up * Time.deltaTime * jumpForce);                       
    }

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Поскольку кажется, что вы, возможно, захотите проверить isGrounded для нескольких игроков, я бы не использовал static, как упомянуто в другой ответ , так как тогда он является статическим для каждогоэкземпляр floorAndWallCheck.


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

Предполагая, что компонент floorAndWallCheck, например, присоединен к объекту player1, который вы можетесделайте

private floorAndWallCheck player1FloorCheck;

private void Awake ()
{
   player1FloorCheck = player1.GetComponent<floorAndWallCheck>(); 
}

private void Update()
{

    //...

    Input.GetKey("w") && player1FloorCheck.isGrounded)
    {
        // ...
    }
}

или вместо GetComponent вы можете сделать его общедоступным

public floorAndWallCheck player1FloorCheck;

или использовать [SerializeField]

[SerializeField] private floorAndWallCheck player1FloorCheck;

иссылаться на соответствующий компонент в Инспекторе (с помощью перетаскивания)


Найти больше способов доступа к другим членам classe здесь

0 голосов
/ 28 января 2019

Здесь похоже, что вы хотите использовать статический

public class floorAndWallCheck : MonoBehaviour {
    static public bool isGrounded = false;

    public void OnTriggerEnter2D(Collider2D floor){
/// etc

Затем в другом файле

if (Input.GetKey("w") && floorAndWallCheck.isGrounded == true) {

https://unity3d.com/learn/tutorials/topics/scripting/statics

Проблема в том, что это будетсделать переменную глобальной для всех экземпляров floorAndWallCheck

Я не думаю, что вы этого хотите, даже если вы спрашиваете об этом в своем вопросе.Вероятно, что вы действительно хотите сделать, это не «поделиться переменной», а вместо этого иметь переменную этого типа в качестве параметра для любой функции, которую вы использовали во 2-м файле.Таким образом, вы можете «передавать» данные из одного места в другое.

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