繁体   English   中英

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

[英]Trouble Sharing Variables between files in c#

我在找出如何在不同的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);                       
    }

由于似乎您可能要检查多个玩家的isGrounded ,所以我不会其他答案所述使用static ,因为那样的话,对于floorAndWallCheck每个实例它都是静态的。


相反,您必须访问相应实例的成员。

假设floorAndWallCheck组件已附加到例如player1对象,则可以执行此操作

private floorAndWallCheck player1FloorCheck;

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

private void Update()
{

    //...

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

或代替使用GetComponent您可以将其GetComponent公开

public floorAndWallCheck player1FloorCheck;

或使用[SerializeField]

[SerializeField] private floorAndWallCheck player1FloorCheck;

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


在这里找到更多访问其他班级成员的方法

在这里看起来您想使用静态

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的所有实例都是全局的

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM