unity3d 如何从一个脚本中访问一个非静态变量,而该脚本又从另一个脚本中连接到画布上?

bzzcjhmw  于 2023-02-23  发布在  其他
关注(0)|答案(1)|浏览(122)

我做了一个游戏,玩家有三条生命。生命是在一个名为Score的脚本中创建的,这个脚本连接到画布上,所以心会出现在屏幕上。一个“公共静态int health”是在同一个脚本中创建的,用来跟踪生命。如果这个变量是静态的,当玩家改变等级时,生命会重新填充,这是我不希望的。然而,如果变量不是静态的,我就不能从另一个脚本使用“www.example.com“访问它Score.health。我试图访问生命的另一个脚本叫做Jump,它连接到播放器,看看它是否与任何东西冲突并删除生命。
我试过使用“游戏对象.查找(“游戏画布”).获取组件<.Score>().健康-= 1;“从跳转脚本访问它,但它不起作用。我还尝试了加载时不销毁,并将健康变量设置为静态。(忽略. before Score,它没有显示其他内容)因此,总之,我要么需要一种方法从跳转脚本访问非静态变量健康,要么需要一种方法在更改级别时(健康为静态)不重新填充生命

csbfibhn

csbfibhn1#

我不建议将Health变量设置为静态和公共变量,我会做以下操作:
1.把Health变量放在player类中,因为这样更有意义,你可能应该把它设为private,然后像这样公开一个getter:public int Health { get; private set; }。这样其他未经授权的脚本将无法改变玩家的健康。
1.在Score脚本中,创建一个对播放器脚本的序列化引用,如下所示:[SerializeField] private Player player.
1.在检查器中,将播放器对象拖动到此播放器引用框
1.根据玩家生命值改变界面,可通过player.Health进入
这可能不是最好的设计选择,但它会让你继续一段时间。希望这有帮助。

相关问题