一、预制体
在Unity中,预制体(Prefab)是一种特殊类型的游戏对象,它允许你创建、配置和保存一个对象,然后在场景中多次使用。预制体的使用使得开发者能够更加灵活和高效地设计和管理游戏对象。
1.创建预制体
可以选择一个或多个游戏对象,然后将它们拖放到场景中的文件夹中,这样就会在该文件夹中创建一个预制体。或者,你可以选择一个游戏对象,然后右键选择 "Create Prefab" 来创建预制体。
当被设置为预设体后,会生成一个预设体文件,对象的名字会呈现蓝山。如下
场景中的Enemy与预设体文件Enemy的关系。
当修改场景中的物体时不会对预设体有影响,但是修改预设体时会对场景中的物体照成同样的修改效果。如果想场景中的物体的修改同步到预设体上,那么可以如下修改
但是这个修改效率不高。加入修改同步多个修改可以通过如下修改
在这里点击应用所用就可以全部同步。
2.预制体变体
在Unity中,预制体变体(Prefab Variants)是一种扩展了预制体的概念,允许你创建具有一定差异的变体,而无需创建完全独立的预制体。这样可以更灵活地处理具有相似结构但可能有细微差异的游戏对象。
创建预制体变体:: 选择一个现有的预制体,然后通过右键选择 "Create -> Prefab Variant" 来创建一个变体。变体将继承原始预制体的所有属性和设置。
变体允许修改继承自原始预制体的属性,包括位置、旋转、缩放、组件属性等。这些修改不会影响其他变体或原始预制体。
使用场景:预制体变体在处理具有共同基础结构但需要一些差异的游戏对象时非常有用,例如不同颜色、不同尺寸的物体。
二、动态修改物体属性
1.获取组件
创建一个物体,再创建一个脚本并挂载到物体上,如何再脚本里面拿到这个物体呢?
这样就可以拿到这个游戏物体了。还有个简单的方式,直接用 gameObject. 就可以拿到该物体的对于属性。
演示:
名称:Debug.log(gameObject.name)
标签:Debug.log(gameObject.tag);
图层:Debug.log(gameObject.layer);
获取Transform组件: Transform trans = this.transform:
获取其他组件:BoxCollider bc = GetComponent
在泛型里面填写要获取的组件类型就可以了。
获取当前物体的子物体身上的某个组件(胶囊碰撞器):
GetComponentInChildren
获取当前物体的父物体身上的某个组件。
GetComponentInParent
给当前物体添加一个组件
gameObject.AddComponent
2.获取游戏物体
如何通过Empty物体上挂载的脚本,去获取Test 物体?
用代码通过游戏物体的名称来获取物体。
GameObject test = GameObject.Find("Test");
通过游戏标签来获取游戏物体。
test = GameObject.FindWithTag("Enemy");
3.通过代码的方式去示例化一个物体
现在有个预设体 Sphere ,如何去通过代码实例化。
首先获取预设体,然后拖拽预设体
public GameObject Prefab;
lnstantiate(Prefab);
在实例化时还有其他用法。
通过指定位置和旋转来放置实例化的对象:
Instantiate(Prefab, new Vector3(x, y, z), Quaternion.Euler(rx, ry, rz));
将实例化的对象设置为指定父级对象的子对象:
Instantiate(Prefab, parentTransform);