[英]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.