目录
一、什么是预制体
在Unity中,预制体(Prefab)是指一个包含了已经设置好的游戏对象及其组件的资源。通过创建预制体,你可以在项目中重复使用相同的游戏对象,而不必每次都重新创建和配置它们。预制体可以包含任何种类的游戏对象,例如角色、道具、场景元素等。在使用预制体时,你可以在场景中多次实例化它们,并且对它们进行修改、更新或替换,这将自动更新所有实例化的对象。
用预制菜类比,厨师加工预制菜的过程就是预制体实例化的过程,这里的厨师其实就是instantiate函数,通过函数将预制体实例化。厨师用预制菜制作出了一道成品菜,就是instantiate函数实例化了一个预制体,将该预制体呈现在场景中。
二、预制体的实例化
1.常规声明、实例化
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
//预制体是用GameObject类型
public GameObject prefab;
private void Start()
{
//使用Instantiate函数进行实例化,还可以初始化预制体的位置等
Instantiate(prefab, new Vector3(0,0,0), Quaternion.identity);
}
}
2.管理性更强的声明、实例化
(1)使用ManagerVars类统一管理prefab,声明prefab
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(menuName ="CreaterManagerVarsContainer")]
public class ManagerVars : ScriptableObject
{
public static ManagerVars GetManagerVars()
{
return Resources.Load<ManagerVars>("ManagerVarsContainer");
}
//所有prefab和需要复用的组件、参数都在该类注册
public GameObject prefab;
}
(2)prefab初始化
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
//无需声明多个prefab,只需声明管理类ManagerVars
private ManagerVars vars;
private void Start()
{
vars = ManagerVars.GetManagerVars();
//直接在需要的地方实例化使用
GameObject go = Instantiate(prefab);
go.transform.position = new Vector3(0, -1.8f, 0);//实例化之后设置预制体的位置、旋转角度等
}
}