脚本代码获取组件的方法及使用方法

脚本代码获取组件的方法及使用方法

游戏对象是一个对象; 未附加到对象的脚本是未实例化的类,并且还不是特定的对象; 当脚本附加到一个对象上时,它就变成了一个真实的对象。 。

脚本执行时,通常会附加到一个对象上。因此,在脚本代码中,你可以随时访问脚本当前附加到的对象,只需使用gameObject即可。

以下两项都可以,此项可以省略

调试.Log(游戏对象.名称);

调试.Log(this.gameObject.name);

2. 如何获取组件

获取一个对象后,可以通过该对象获取它的各个组件。 例如贴图笔刷,创建一个新的测试脚本文件并将其挂在球体上。 脚本内容保持默认。 为了获取Sphere Collider组件,可以直接使用GetComponent()方法,并修改Test脚本内容如下。

使用Unity引擎;

公共类测试:MonoBehaviour

SphereCollider 对撞机;

无效开始()

对撞机=gameObject.GetComponent();

上面是一段很常见的获取组件的代码,即先从当前脚本中获取游戏对象,然后在游戏对象中查找组件。

Transform组件也可以使用GetComponent()方法来获取,但是由于Transform组件非常常用,所以可以随时通过字段transform来访问,而不需要通过代码来获取。

为了方便起见,Unity设计了一种简单的获取组件的方式。 其思想是,在同一个对象上,从任意一个组件开始,都可以直接获取其他组件unity 找到物体,而无需先获取游戏对象。换句话说,组件的等效写法有很多种,例如:

对撞机=gameObject.getComponent();

unity获取物体当前位置_unity找不到物体_unity 找到物体

//下面每句话都相当于上面的句子

对撞机=this.GetComponent();

碰撞器=GetComponent();

对撞机=transform.GetComponent();

如果需要获取多个相同的组件游戏角色,则需要使用GetComponents()方法,该方法通常存储在数组中。

三、获取对象的方法 1、通过名称获取对象

只需使用GameObject.Find()方法即可。示例:创建一个新的Cube并附加一个TestGetObject脚本,内容如下

公共类 TestGetGameObject :MonoBehaviour

unity获取物体当前位置_unity 找到物体_unity找不到物体

游戏对象 objMainCam;

游戏对象 objMainLight;

无效开始()

objMainCam=GameObject.Find("主相机");

objMainLight=GameObject.Find("定向光");

Debug.Log("主摄像头:"+objMainCam.name);

Debug.Log("主光源:"+objMainLight.name);

//将主相机放置在该物体后面1m处

unity找不到物体_unity 找到物体_unity获取物体当前位置

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.通过标签查找对象

通过例子来解释

unity 找到物体_unity获取物体当前位置_unity找不到物体

//找到第一个标记为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