Unity C#,无法从另一个脚本访问变量

unity c#, unable to acces a variable form another script

提问人:Valentino 提问时间:8/7/2021 最后编辑:Arcueid D'athemonValentino 更新时间:8/9/2021 访问量:1773

问:

我想从另一个名为 BulletScript 的脚本访问一个名为 cooldown 的变量,但我无法弄清楚我的代码出了什么问题。 这是我的代码: 第一:

using UnityEngine;

public class gunMechanic : MonoBehaviour
{
    private BulletScript bulletScript;

    private void Awake() {
        bulletScript = GameObject.FindObjectOfType<BulletScript>();
        Debug.Log(bulletScript.cooldown);
    }
}

第二:


using UnityEngine;

public class BulletScript : MonoBehaviour
{
  public float cooldown = 1;
}
C# unity-游戏引擎 net-4.0 .net-2.0

评论

0赞 Jaimin 8/7/2021
bulletScript = FindObjectOfType<BulletScript>();试试这个
0赞 Valentino 8/7/2021
@Jaimin仍然不起作用
0赞 nIcE cOw 8/7/2021
@Valentino:请提供这些脚本附加到哪个游戏对象的信息?它们在层次结构中如何相互关联?有些信息将真正帮助我们以良好的方式为您提供帮助。如果这两个都在同一个游戏对象上,那么你只需要使用它就可以工作了。GetComponent < BulletScript > ()
1赞 Valentino 8/8/2021
@nIcEcOw你是对的,我忘记了其中一个脚本还没有贴花,这导致了麻烦,谢谢你的帮助
0赞 nIcE cOw 8/8/2021
@Valentino:很高兴你找到了答案。对于其余的,我们非常欢迎你,保持微笑:-)

答:

0赞 Francesco - FL 8/7/2021 #1

首先,我认为您应该将变量声明为 ,如果您希望该值是您要查找它的脚本的值。static

不要声明类然后查找变量,直接使用BulletScript.cooldown

0赞 Arcueid D'athemon 8/7/2021 #2

以下是导致您的问题的许多不同的可能原因。尝试在之前添加 [SerializeField],并使用脚本直接序列化对象。private BulletScript bulletScript;

您可能:

  1. 不要将此脚本添加到场景中的对象;
  2. 在两个不同的附加加载场景中拥有这些脚本;
  3. 在和/或之后使用第二个脚本实例化对象Awake()Start();
  4. 忘记使用第二个脚本实例化对象。

如果可以提供有关项目启动的任何日志或更多信息。

评论

0赞 Arcueid D'athemon 8/7/2021
我的建议是避免在项目中使用静态变量,因为以后,由于从不同的类访问此变量,您将遇到许多性能问题和错误。
0赞 Valentino 8/7/2021
我试图在它之前添加 [SerializeField],但我无法在 Unity 中将我的脚本移动到那里
0赞 Arcueid D'athemon 8/7/2021
如果您从 MonoBehaviour 继承了该脚本,则需要将此脚本放在场景中的任何游戏对象上,以使用对它的引用。
1赞 Valentino 8/8/2021
你是对的,我忘记了其中一个脚本还没有贴花,这导致了麻烦,谢谢你的帮助