也许标题有点难以理解,现在先解释一下标题所表达的意思。
首先举个简单的例子,在Unity开发中我们都用过触发器检测OnTrigger,它有个形参other(暂且先不说参数类型),我们可以用这个参数获取碰撞对象的标签,然后进行判断进行下一步的操作。但是如果在别的地方获取游戏对象标签会看到另一种方法,也就是获取标签的时候就会看到两个版本:
void OnTrigger(Collider other){ //忽略参数类型
//版本一
other.gameObject.tag
}
//版本二
other.tag
此时就会有疑问了,为什么会在中间加个.gameObject
呢?没错,这就是这个标题所表达的意思以及这篇文章所要讲述的问题。
other.gameObject.tag
和other.tag
都可以用来获取碰撞或触发事件中涉及的另一个游戏对象的标签。但是,两者的使用取决于程序的上下文和other对象的类型。
诶~,这里咱们提到other对象的类型,也就是上面说的参数的类型,为什么上面说忽略就是在这里解释。
因为像
.tag
这样的属性一般是游戏对象才有的,所以参数类型是Collider
的话,是不能直接获取tag属性的,要经过.gameObject
才可以获取到。相反的,如果参数类型是GameObject
的话可以直接通过.tag
获取标签。
到这里,两者的区别已经很清晰了,就看other
是不是GameObject
类型的,如果不是,需要经过一层.gameObject
获取。下面分别介绍一下各自的使用环境。
当other是一个GameObject
类型时,你可以直接使用other.tag
来获取标签。在这种情况下,other参数直接代表游戏对象,所以可以直接访问其tag属性。
例如:
public GameObject object;
if(object.tag=="Player"){
//处理函数
}
当other不是直接的GameObject
类型,而是一个除此之外的其他类型对象时,你需要通过.gameObject
属性来访问该对象的tag标签。这是因为gameObject
属性提供了游戏对象的引用,从而允许你访问其标签。
例如:
void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player")
{
// 处理代码...
}
}
总之,就看游戏对象的类型是什么,如果是GameObject
就可以直接获取,不是就需要经过.gameObject
获取。