首页 > 解决方案 > 为什么 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看不到脚本有健康变量?

标签: c#unity3dphoton

解决方案


您确定它正在寻找正确的类型,而不是同名但来自不同命名空间的类型吗?

CharacterControllerUnity 本身已经有一个在命名空间中命名的内置类型,UnityEngine因此您的第二个脚本很可能正在使用该类型,因为在顶部您将拥有一个

using UnityEngine;

确保您在脚本中引用了正确的内容。

例如,您可以将您的放入特定的命名空间中,例如

namespace MyStuff
{
    public class CharacterController : MonoBehaviourPunCallbacks
    {
        ...
    }
}

然后在您的其他脚本中明确使用

public MyStuff.CharacterController Controller;

Controller = ActualPlayer.GetComponent<MyStuff.CharacterController>();
Health = Controller.Health;

除此之外,请记住这float是一个类型,而不是引用,所以很可能您将该值存储在第二个脚本的字段中不是您想要做的;)

而不是总是简单地访问Controller.Health


推荐阅读