c# - 为什么 C# 在使用 GetComponent 时看不到另一个脚本中的变量?C#
问题描述
所以我有一个 CharacterController 类,它只处理用户输入和如果玩家被子弹击中并降低该角色的健康状况。我需要在另一个脚本中使用这个健康值,所以已经使用下面的代码来尝试这个但是我得到一个 CS01061,因为它说它找不到健康变量。
角色控制器类变量:
public class CharacterController : MonoBehaviourPunCallbacks
{
public float MovementSpeed = 2;
public float JumpForce = 5;
public float Health = 100f;
public float height = 10;
public static GameObject LocalPlayerInstance;
这是需要上面的 Health 的 PlayerManager 类的代码:
//Gloabl Variables
public GameObject ActualPlayer;
public CharacterController Controller;
public float Health;
public void Awake()
{
ActualPlayer = GameObject.Find("Player");
Controller = ActualPlayer.GetComponent<CharacterController>();
Health = Controller.Health;
......
Player 是一个预制件,它是一个由 Photon 初始化的 GameObject,并具有 CharacterController 脚本作为组件。为什么unity看不到脚本有健康变量?
解决方案
您确定它正在寻找正确的类型,而不是同名但来自不同命名空间的类型吗?
CharacterController
Unity 本身已经有一个在命名空间中命名的内置类型,UnityEngine
因此您的第二个脚本很可能正在使用该类型,因为在顶部您将拥有一个
using UnityEngine;
确保您在脚本中引用了正确的内容。
例如,您可以将您的放入特定的命名空间中,例如
namespace MyStuff
{
public class CharacterController : MonoBehaviourPunCallbacks
{
...
}
}
然后在您的其他脚本中明确使用
public MyStuff.CharacterController Controller;
和
Controller = ActualPlayer.GetComponent<MyStuff.CharacterController>();
Health = Controller.Health;
除此之外,请记住这float
是一个值类型,而不是引用,所以很可能您将该值存储在第二个脚本的字段中不是您想要做的;)
而不是总是简单地访问Controller.Health
。
推荐阅读
- reactjs - 如何解决 Reactjs 中的“找不到模块”?
- sql - 在 SQL 中混合 Like 和 Not Like
- java - 从 Android Java 进程中获取或创建上下文
- java - 在二叉搜索树中按顺序检索元素
- javascript - 作为 Array.prototype.every() 方法的结果,我如何返回一个布尔数组?
- r - 如何使用索引的输出来对我的数据框进行子集化?
- java - 按钮侦听器内的代码未执行
- google-search - 为什么当我输入更多字母时,我的第一个自动完成选项会消失?
- javascript - 带循环的异步和等待
- python - Pygame Snake 随机与自身碰撞