提问人:Valentino 提问时间:8/7/2021 最后编辑:Arcueid D'athemonValentino 更新时间:8/9/2021 访问量:1773
Unity C#,无法从另一个脚本访问变量
unity c#, unable to acces a variable form another script
问:
我想从另一个名为 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;
}
答:
0赞
Francesco - FL
8/7/2021
#1
首先,我认为您应该将变量声明为 ,如果您希望该值是您要查找它的脚本的值。static
不要声明类然后查找变量,直接使用BulletScript.cooldown
0赞
Arcueid D'athemon
8/7/2021
#2
以下是导致您的问题的许多不同的可能原因。尝试在之前添加 [SerializeField],并使用脚本直接序列化对象。private BulletScript bulletScript;
您可能:
- 不要将此脚本添加到场景中的对象;
- 在两个不同的附加加载场景中拥有这些脚本;
- 在和/或之后使用第二个脚本实例化对象
Awake()
Start()
; - 忘记使用第二个脚本实例化对象。
如果可以提供有关项目启动的任何日志或更多信息。
评论
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
你是对的,我忘记了其中一个脚本还没有贴花,这导致了麻烦,谢谢你的帮助
评论
bulletScript = FindObjectOfType<BulletScript>();
试试这个GetComponent < BulletScript > ()