目录
在游戏开发中,对游戏物体的操作是至关重要的环节。以下将详细阐述游戏物体在脚本中的各类操作方法。
一、游戏物体与脚本的关联
(一)获取脚本所挂载的游戏物体
在脚本中,每个游戏物体都对应一个 GameObject 类。在组件的游戏脚本里,可以通过 GameObject 来获取脚本所挂载的游戏物体。例如:
GameObject go = this.gameObject;
这里的 this 在符合条件时可以省略,直接通过 GameObject 就能够取到对应的游戏物体。之后就可以通过 go.name 等方式获取游戏物体的属性,比如打印出游戏物体的名称。
二、游戏物体的基本属性操作
(一)名称
游戏物体的名称通过 name 属性获取或修改。例如,获取当前游戏物体名称:
string objectName = gameObject.name;
(二)标签
通过 tag 属性来操作游戏物体的标签。比如将游戏物体的标签设置为 player:
gameObject.tag = "player";
(三)图层
图层在代码里通过索引来表示,获取图层信息可以使用相关代码获取对应的索引值。
(四)激活状态
- 激活状态属性区分
- 现在激活状态分为两个属性,
activeInHierarchy和gameObject.activeSelf。 activeInHierarchy代表的是真正的当前激活状态。当一个物体有子物体,中间层非激活时,子物体的activeInHierarchy为 false,但它自身的activeSelf可能为 true。
- 现在激活状态分为两个属性,
- 获取和设置激活状态
- 获取激活状态可以通过
debug.log(cube.activeInHierarchy)等方式。 - 设置激活状态可以使用
setActive方法,例如将test的激活状态设置为 false:
- 获取激活状态可以通过
test.SetActive(false);
三、获取组件相关操作
(一)获取 transform 组件
获取 transform 组件有最简便的方法,直接通过 this.transform 即可。在脚本中默认就会有一个 transform 变量对应身上挂载的 transform 组件。例如获取位置信息:
Vector3 position = transform.position;
(二)获取其他组件
获取除 transform 外的其他组件需要使用 GetComponent 方法,该方法有一个泛型,在泛型里填写要获取的组件类型。例如获取一个音频源组件:
AudioSource audioSource = gameObject.GetComponent<AudioSource>();
(三)获取子物体和父物体上的组件
- 获取子物体组件
有GetComponentInChildren方法用于获取当前物体子物体身上的组件。例如获取子物体上的胶囊碰撞器:
CapsuleCollider collider = gameObject.GetComponentInChildren<CapsuleCollider>();
- 获取父物体组件
使用GetComponentInParent方法获取当前物体的父物体身上的组件。比如获取父物体上的盒子碰撞体:
BoxCollider boxCollider = gameObject.GetComponentInParent<BoxCollider>();
四、添加组件
可以通过 AddComponent 方法给游戏物体添加组件。例如给 cube 添加一个音频源组件:
gameObject.AddComponent<AudioSource>();
五、获取游戏物体的方法
(一)通过名称获取
可以使用 GameObject.Find 方法通过游戏物体的名称来获取游戏物体。例如:
GameObject testObject = GameObject.Find("test");
(二)通过标签获取
通过 GameObject.FindWithTag 方法可以根据游戏标签来获取游戏物体。例如:
GameObject enemyObject = GameObject.FindWithTag("enemy");
六、实例化和销毁游戏物体
(一)实例化
- 基本实例化方法
获取到预设体(预设体类型也是GameObject)后,可以通过Instantiate方法实例化游戏物体。例如:
GameObject prefab = // 获取到的预设体;
GameObject instantiatedObject = Instantiate(prefab);
- 指定父物体实例化
可以指定实例化后的物体的父物体,例如将实例化后的球体作为空物体的子物体:
GameObject prefab = // 获取到的预设体;
GameObject instantiatedObject = Instantiate(prefab, transform);
- 指定位置和旋转实例化
还可以指定实例化后的物体的位置和旋转信息,比如将物体放置在世界原点且不旋转:
GameObject prefab = // 获取到的预设体;
Quaternion noRotation = Quaternion.identity;
GameObject instantiatedObject = Instantiate(prefab, Vector3.zero, noRotation);
(二)销毁
使用 Destroy 方法可以销毁游戏物体。例如销毁刚刚实例化的物体:
Destroy(instantiatedObject);
通过以上对游戏物体在脚本中的各种操作方法的介绍,希望能帮助游戏开发者更好地理解和运用游戏物体相关知识,提高开发效率。
5万+

被折叠的 条评论
为什么被折叠?



