游戏对象是一个对象; 未附加到对象的脚本是未实例化的类,并且还不是特定的对象; 当脚本附加到一个对象上时,它就变成了一个真实的对象。 。
脚本执行时,通常会附加到一个对象上。因此,在脚本代码中,你可以随时访问脚本当前附加到的对象,只需使用gameObject即可。
以下两项都可以,此项可以省略
调试.Log(游戏对象.名称);
调试.Log(this.gameObject.name);
2. 如何获取组件
获取一个对象后,可以通过该对象获取它的各个组件。 例如贴图笔刷,创建一个新的测试脚本文件并将其挂在球体上。 脚本内容保持默认。 为了获取Sphere Collider组件,可以直接使用GetComponent()方法,并修改Test脚本内容如下。
使用Unity引擎;
公共类测试:MonoBehaviour
SphereCollider 对撞机;
无效开始()
对撞机=gameObject.GetComponent();
上面是一段很常见的获取组件的代码,即先从当前脚本中获取游戏对象,然后在游戏对象中查找组件。
Transform组件也可以使用GetComponent()方法来获取,但是由于Transform组件非常常用,所以可以随时通过字段transform来访问,而不需要通过代码来获取。
为了方便起见,Unity设计了一种简单的获取组件的方式。 其思想是,在同一个对象上,从任意一个组件开始,都可以直接获取其他组件unity 找到物体,而无需先获取游戏对象。换句话说,组件的等效写法有很多种,例如:
对撞机=gameObject.getComponent();
//下面每句话都相当于上面的句子
对撞机=this.GetComponent();
碰撞器=GetComponent();
对撞机=transform.GetComponent();
如果需要获取多个相同的组件游戏角色,则需要使用GetComponents()方法,该方法通常存储在数组中。
三、获取对象的方法 1、通过名称获取对象
只需使用GameObject.Find()方法即可。示例:创建一个新的Cube并附加一个TestGetObject脚本,内容如下
公共类 TestGetGameObject :MonoBehaviour
游戏对象 objMainCam;
游戏对象 objMainLight;
无效开始()
objMainCam=GameObject.Find("主相机");
objMainLight=GameObject.Find("定向光");
Debug.Log("主摄像头:"+objMainCam.name);
Debug.Log("主光源:"+objMainLight.name);
//将主相机放置在该物体后面1m处
objMainCam.transform.position=transform.position-transform.forward;
GameObject.Find()方法更常用,但它有两个缺点
为了验证第一个缺点,我们可以禁用上例中的场景光源(取消选中 Inspector 窗口中的 Directional Light 选项)。 如果我们再次运行,就会出现错误。 异常类型为NullReferenceException(空引用)。双击该错误即可定位到对应的源代码。 源码如下
Debug.Log("主光源:"+objMainLight.name);
这是因为它当前有一个空引用,因此访问其名称字段将导致错误。这表明 GameObject.Find() 方法无法找到不活动的对象。
至于第二个缺点unity 找到物体,在简单场景下很难察觉。 在一个完整的游戏中,场景中往往有数千个物体,效率差异会很明显。 但这并不意味着GameObject.Find()方法不能使用。 如果只在Start方法中调用一次,然后将对象保存到objMainCam中,以后就不需要再次查找,所以不会有明显的效率差异。
2.通过标签查找对象
通过例子来解释
//找到第一个标记为Player的对象
GameObject 玩家=GameObject.FindGameObjectWithTag("Palyer");
//查找所有标记为Monster的对象,返回只是一个数组,结果可以是0或者更多
GameObject[] monsters=GameObject.FindGameObjectsWithTag("Monser");
除了在Inspector中修改对象的标签外,还可以在脚本中修改,例如:
GameObject m=GameObject.FindGameObjectWithTag("玩家");
m.tag="立方体";
if(m.CompareTag("Cube")) //CompareTag用法相当于m.tag=="Cube",建议使用CompareTag
......//轻微地
文章来源:https://blog.csdn.net/m0_63024355/article/details/130507378