C# 如何检查游戏对象是否具有特定属性?
我有一个具有C# 如何检查游戏对象是否具有特定属性?,c#,unity3d,C#,Unity3d,我有一个具有公共布尔值IsIndecuctible=true属性的播放器对象。我还有一个Mine对象,它具有以下功能: void OnCollisionEnter2D(Collision2D other) { if (other.gameObject.CompareTag("Player") && !other.gameObject.isIndestructible) { SceneManager.LoadScene("Game"); } } 基
公共布尔值IsIndecuctible=true
属性的播放器对象。我还有一个Mine对象,它具有以下功能:
void OnCollisionEnter2D(Collision2D other) {
if (other.gameObject.CompareTag("Player") && !other.gameObject.isIndestructible) {
SceneManager.LoadScene("Game");
}
}
基本上,我只想在玩家对象不是坚不可摧的情况下重新加载游戏。但是这个代码不起作用(gameObject
没有isindectructible
属性),那么找到这个的正确方法是什么呢
我有一个具有公共布尔IsIndecuctible=true属性的播放器对象
那么你已经在玩家对象上附加了一个monobhavior
,对吗
Player.cs
using UnityEngine;
public class Player : MonoBehaviour
{
public bool isIndestructible {get; set;}
}
要在Mine
中获取属性isindectructible
void OnCollisionEnter2D(Collision2D other) {
var player = other.gameObject.GetComponent<Player>();
if(player != null && player.isIndestructible){
SceneManager.LoadScene("Game");
}
}
无效OnCollisionInter2D(碰撞2D其他){
var player=other.gameObject.GetComponent();
如果(player!=null&&player.isindectructible){
场景管理器。加载场景(“游戏”);
}
}
isDestructable
不是属性,而是字段。也就是说,将它作为一个属性,并在一个接口中声明它,该接口由所有具有此属性的类实现。因此,您只需检查对象是否来自此接口,并使用interfaces属性,例如var objectsindestructable=(其他.gameObject作为iHaveIsIndectable)?.IsIndectable
。您可以使用反射,但这是一个糟糕的设计。您必须使用GetComponent
来获取与所需属性/字段/方法关联的脚本。我尝试了此操作,但在尝试运行游戏时它给了我StackOverflowException错误。我将[hideininstit]
放在ISindectructible声明前面,以及Player=new Player)在Player类中设置code>,以便我可以在private void Start()
中设置Player.isindecuctible=true
。在不使用get/set的情况下,对我有效的是Player-Player=other.gameObject.GetComponent(typeof(Player))作为播放器
然后检查player.i点击@IronWaffleMan请用最小的单元测试测试你的脚本。顺便说一句,不要使用GetComponent(typeof(Player))
,因为typeof(Player)
使用反射,速度非常慢。改用GetComponent()
。