Unity基础知识笔记(一)——预制体(Prefab)及其组件

Unity快速入门教程-详解预制体(Prefab)及其实例化Instantiate_unity instantiate-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_53680210/article/details/126791644?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170988531916800185874753%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170988531916800185874753&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-126791644-null-null.142%5Ev99%5Epc_search_result_base4&utm_term=%E9%A2%84%E5%88%B6%E4%BD%93&spm=1018.2226.3001.4187

目录

一、什么是预制体

二、预制体的实例化

1.常规声明、实例化

2.管理性更强的声明、实例化


一、什么是预制体

在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);//实例化之后设置预制体的位置、旋转角度等
    }
}

  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Unity中,可以使用PrefabUtility类来获取未实例化的GameObject预制上的组件。 下面是一个简单的示例,演示如何获取未实例化的GameObject预制上的组件: 1. 首先,打开Unity编辑器并创建一个新场景。 2. 在项目视图中创建一个新的预制件。 3. 选择预制件并在Inspector视图中添加一个新组件。例如,您可以添加一个名为“TestComponent”的C#脚本。 4. 在TestComponent脚本中添加以下代码: ``` using UnityEngine; public class TestComponent : MonoBehaviour { public int testValue = 0; } ``` 5. 然后,将预制件拖动到场景中。 6. 选择预制件并在Inspector视图中更改TestComponent的testValue属性。例如,您可以将其设置为5。 7. 打开脚本编辑器并创建一个新的C#脚本。将以下代码添加到脚本中: ``` using UnityEngine; using UnityEditor; public class GetPrefabComponent : MonoBehaviour { public GameObject prefab; void Start() { TestComponent testComponent = PrefabUtility.GetPrefabAssetType(prefab) == PrefabAssetType.Regular ? PrefabUtility.GetPrefabInstanceHandle(prefab).GetComponent<TestComponent>() : null; if (testComponent != null) { Debug.Log("TestComponent testValue: " + testComponent.testValue); } else { Debug.Log("TestComponent not found on prefab"); } } } ``` 8. 在场景中创建一个新的空对象,并将GetPrefabComponent脚本添加到该对象上。 9. 在GetPrefabComponent脚本组件中,将prefab属性设置为您创建的预制件。 10. 您现在可以运行场景,并查看控制台中的输出。如果一切正常,您应该会看到以下消息: ``` TestComponent testValue: 5 ``` 这表明您成功获取了未实例化的GameObject预制上的TestComponent组件,并检索了其testValue属性。 希望这个示例能够帮助您了解如何在Unity中获取未实例化的GameObject预制上的组件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

差点意思的鸭鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值