利用预制体创建物体,要使用实例化方法 Instantiate()。它需要一个预制体的引用作为模版,返回值总是新创建那个物体的引用。如果预制体以 GameObject 类型传入,那么返回的结果也是 GameObject 类型的。
小提示:
任意物体都可以作为模版,但不一定是预制体
预制体的类型是GameObject。有时候由于写代码时的失误,用场景中的某个物体作为Instantiate方法的第1个参数, 同样也能成功创建新物体。
这说明在游戏运行以后,预制体和其他物体有着同等的地位,都可以使用。这种设计一方面增强了脚本的灵活性.,另一方面也经常出现因混淆而引起的各种 bug。关键是要搞清楚引用对象的关系。(虽然都是GameObject类型,但是本质不同)
在实际使用时,有时候要具体指定新建物体的位置、朝向和父物体,因此 Instantiate0 方法也具有多种重载形式,它们的区别在于参数不同。我在这挑选了3种常用的重载形式进行说明:文章来源:https://www.toymoban.com/news/detail-722152.html
重载形式 | 参数1 | 参数2 | 参数3 | 参数4 |
仅指定父物体 | 预制体 | 父物体的Transform类型,null 表示没有父物体,置于场景根节点 | ||
指定位置和朝向 | 预制体 | 空间位置,世界坐标系,Vector3类型 | 物体的朝向,Quaternion类型 | |
指定位置、朝向和父物体 | 预制体 | 空间位置,世界坐标系,Vector3类型 | 物体的朝向,Quaternion类型 | 父物体的Transform类型,null表示没有父物体,置于场景根节点 |
tips:预制体也可以用组件代替(unity的特色!)文章来源地址https://www.toymoban.com/news/detail-722152.html
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DeBugTest : MonoBehaviour
{
public GameObject pre;
// Start is called before the first frame update
void Start()
{
GameObject objA = Instantiate(pre, null);
GameObject objB = Instantiate(pre, new Vector3(3,0,3),Quaternion.identity);
}
// Update is called once per frame
void Update()
{
}
}
到了这里,关于在unity中如何利用预制体创造物体的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!