在C#中的文件之间无法共享变量

时间:2019-01-28 02:51:38

标签: c# variables unity3d

我在寻找如何在不同的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 :(得分:2)

由于似乎您可能想检查isGrounded是否有多个玩家,所以我不会使用the other answer中提到的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;

并在检查器中引用相应的组件(通过拖放)


找到更多访问其他班级成员的方法here

答案 1 :(得分:0)

在这里您似乎要使用静态

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的所有实例

即使您在问题中要求这样做,我也不认为您希望这样做。您可能真正想做的不是“共享变量”,而是让该类型的变量成为您在第二个文件中使用的任何函数的参数。这样,您可以将数据从一个地方“传递”到另一个地方。