以下是关于利用unity脚本创建物体的学习记录。
在游戏场景中,当我们需要动态创建物体的时候,就可以利用脚本创建物体。
注:动态创建物体指的是在游戏或项目运行时创建物体,当结束运行时物体并不存在于场景中,因为只有在脚本运行时才会实例化对象。
1.预制体(Prefab)
在unity中可以将预制体看成是物体的模板,它可以随时从Project面板中拖入场景中成为一个物体,但Project面板中的预制体不会减少,这样就相当于利用一个模板创建了一个物体在场景中。
创建预制体:将Hierarchy面板中的物体拖拽到Project面板中即可完成创建,创建好的预制体标识和名称都会变成蓝色。而且在Inspector面板上会出现Prefab栏,Open按钮(打开预制体,可以进入预制体的编辑界面),Select按钮(选中预制体文件,可以用来定位到当前使用的预制体文件),Overrides按钮(覆盖预制体,可以用来覆盖对预制体的更新操作)。
Open按钮:
Select按钮:
Overrides按钮:
这里给预制体添加了一个BoxCollider,点击按钮后会有一个小窗提示做了哪些更改,Apply All(单独应用按钮),Revert All(撤销按钮)。
编辑预制体:选中要进行编辑的预制体点击Open按钮或双击Project窗口中的预制体文件,进入预制体编辑界面,完成修改后在Hierarchy面板上点击方向向左的箭头即可回到主场景。
2.创建物体
利用预制体创建物体,使用Instantiate()实例化方法,它需要引用一个预制体作为模板,返回值类型也是引用物体的类型。
Instantiate()方法常用重载形式:
创建一个物体和预制体并挂载脚本。
2.1仅指定父物体:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CreateObjectTest : MonoBehaviour
{
//声明一个GameObject类型的公开变量引用物体
public GameObject Object;
void Start()
{
//在场景根节点创建一个物体
//第一个参数是将要实例化的物体,第二个参数是父物体的Transform类型
//null表示没有父物体,创建在根节点
GameObject object1 = Instantiate(Object, null);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CreateObjectTest : MonoBehaviour
{
//声明一个GameObject类型的公开变量引用物体
public GameObject Object;
void Start()
{
//在当前物体身上创建一个子物体
//第一个参数是将要实例化的物体,第二个参数是父物体的Transform类型
GameObject object2 = Instantiate(Object, transform);
}
}
2.2指定物体坐标和朝向
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CreateObjectTest : MonoBehaviour
{
//声明一个GameObject类型的公开变量引用物体
public GameObject Object;
void Start()
{
//指定创建物体的坐标和旋转角度Quaternion.identity表示单位旋转,物体与世界轴或父轴完全对齐
GameObject object3 = Instantiate(Object,new Vector3(2,0,2),Quaternion.identity);
}
}
2.3指定物体坐标、朝向和父物体
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CreateObjectTest : MonoBehaviour
{
//声明一个GameObject类型的公开变量引用物体
public GameObject Object;
void Start()
{
//指定创建物体的坐标、旋转角度Quaternion.identity表示单位旋转,物体与世界轴或父轴完全对齐和父物体
//第一个参数是将要实例化的物体,第二个参数是物体的位置,第三个参数是物体的朝向,第四个参数是父物体的Transform类型,
GameObject object3 = Instantiate(Object,new Vector3(2,0,2),Quaternion.identity,transform);
}
}
以上就是关于unity利用脚本创建组件的所有学习记录内容,如有错误还请指正。