我在寻找如何在不同的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);
}
答案 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的所有实例
即使您在问题中要求这样做,我也不认为您希望这样做。您可能真正想做的不是“共享变量”,而是让该类型的变量成为您在第二个文件中使用的任何函数的参数。这样,您可以将数据从一个地方“传递”到另一个地方。