• 在unity中如何利用预制体创造物体


    利用预制体创建物体,要使用实例化方法 Instantiate()。它需要一个预制体的引用作为模版,返回值总是新创建那个物体的引用。如果预制体以 GameObject 类型传入,那么返回的结果也是 GameObject 类型的。

    小提示:

    任意物体都可以作为模版,但不一定是预制体

    预制体的类型是GameObject。有时候由于写代码时的失误,用场景中的某个物体作为Instantiate方法的第1个参数, 同样也能成功创建新物体。

    这说明在游戏运行以后,预制体和其他物体有着同等的地位,都可以使用。这种设计一方面增强了脚本的灵活性.,另一方面也经常出现因混淆而引起的各种 bug。关键是要搞清楚引用对象的关系。(虽然都是GameObject类型,但是本质不同)

    在实际使用时,有时候要具体指定新建物体的位置、朝向和父物体,因此 Instantiate0 方法也具有多种重载形式,它们的区别在于参数不同。我在这挑选了3种常用的重载形式进行说明:

    重载形式参数1参数2参数3参数4
    仅指定父物体预制体父物体的Transform类型,null 表示没有父物体,置于场景根节点
    指定位置和朝向预制体空间位置,世界坐标系,Vector3类型物体的朝向,Quaternion类型
    指定位置、朝向和父物体预制体空间位置,世界坐标系,Vector3类型物体的朝向,Quaternion类型父物体的Transform类型,null表示没有父物体,置于场景根节点

    tips:预制体也可以用组件代替(unity的特色!)

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. public class DeBugTest : MonoBehaviour
    5. {
    6. public GameObject pre;
    7. // Start is called before the first frame update
    8. void Start()
    9. {
    10. GameObject objA = Instantiate(pre, null);
    11. GameObject objB = Instantiate(pre, new Vector3(3,0,3),Quaternion.identity);
    12. }
    13. // Update is called once per frame
    14. void Update()
    15. {
    16. }
    17. }

  • 相关阅读:
    深度学习中的熵、交叉熵、相对熵(KL散度)、极大释然估计之间的联系与区别
    幼儿园的老师该怎么写论文呢?
    八、JavaScript:事件监听器
    浅析函数栈
    springboot基础(28):jdbcTemplate
    yolov5-6.0使用&改进
    wget 下载盯盘文件
    蓝桥杯训练题JAVA实现 入门训练 圆的面积
    Python数据分析之numpy的使用
    【软考 系统架构设计师】项目管理④ 软件质量管理
  • 原文地址:https://blog.csdn.net/m0_62407354/article/details/133972469