unity中添加预制体及其基本设置

unity中添加预制体及其基本设置

Unity 中使用预制体的好处

1. 提高代码复用性

预制体可将一个游戏对象及其所有组件、子对象和设置存储在一个资源文件中,然后在项目中多次使用这个资源。这大大提高了代码的复用性,减少了重复工作
示例:

假设有一个敌人角色,可以将其创建为一个预制体,然后在多个场景中复用这个预制体,而不需要为每个场景单独创建和设置敌人

2. 统一管理对象

预制体使得管理游戏对象变得更加容易。可以集中管理一个预制体的所有实例,而不需要在多个场景或脚本中分别管理。
示例:

假设有一个玩家角色,可以创建一个预制体,然后在多个场景中使用。如果需要修改玩家角色的某个属性(例如生命值),只需要修改预制体,所有实例都会自动更新

3. 实时编辑和同步更新

当在场景视图中修改一个预制体实例时,这些修改会自动同步到预制体资源中,反之亦然。这使得实时编辑和同步更新成为可能,提高了开发效率。
示例:

假设在场景视图中调整了一个预制体实例的位置和旋转,这些修改会自动应用到预制体资源,并同步到所有其他实例

4. 提高性能

预制体可以帮助提高性能。当在场景中多次使用同一个预制体时,Unity 可以优化对象的创建和初始化过程,从而提高游戏的性能

示例:

假设在游戏中创建了多个敌人实例,使用预制体可以确保这些实例以最优的方式进行创建和初始化,从而减少性能开销

5. 层级结构和子对象管理

预制体可以包含子对象和组件,并且可以在层级结构中进行管理。这使得复杂的对象结构更加容易管理
示例:

假设有一个复杂的敌人角色,包含多个子对象(如武器、护甲等),可以将这些子对象嵌套在父对象中,并以预制体的形式进行管理

6. 资源打包和加载

预制体可以帮助更好地管理资源的加载和卸载。可以将多个预制体打包成一个资源包,并在需要时动态加载和卸载,从而优化资源管理
示例:

假设在游戏中需要加载多个场景,可以将这些场景中的预制体打包成一个资源包,并在需要时动态加载,减少内存占用

使用示例

  1. 在Asserts创建了prefabs用于存放项目中用到的预制体

  2. 可以通过预制体创建多个GameObject,并通过修改预制体的一些参数从而影响其所有子GameObject,例如设置GameObject的大小,(预制体的子类会有蓝色图标)

  3. 对预制体进行统一的旋转设置(例如添加脚本组件foodControl)

csharp 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class foodControl : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        transform.Rotate(Vector3.up, Space.World);
    }
}

代码解释

transform.Rotate(Vector3.up, Space.World)这行代码的作用是让当前游戏对象绕着世界坐标系的 Y轴(即垂直轴)进行旋转

1. transform

  • 类型: Transform
  • 作用: transform 是 Unity 中每个游戏对象(GameObject)都包含的一个组件,用于描述该对象的位置、旋转和缩放等信息
  • 解释: transform 表示当前游戏对象的变换组件,可以通过它来操作对象的位置、旋转和缩放

2. Rotate

  • 类型: 方法(Method)
  • 作用: Rotate 是 Transform 组件的一个方法,用于旋转游戏对象
  • 解释: 通过调用 Rotate 方法,可以指定一个旋转轴和旋转量,从而使游戏对象绕着该轴旋转

3. Vector3.up

  • 类型: Vector3
  • 作用: Vector3 是 Unity 中的一个结构体,用于表示三维向量。Vector3.up 是 Vector3 类的一个静态变量,表示向上的向量
  • 解释: Vector3.up 的值是 (0, 1, 0),即世界坐标系中的 Y 轴方向。在 Rotate 方法中,Vector3.up 指定了旋转轴为 Y 轴

4. Space.World

  • 类型: 枚举(Enum)
  • 作用: Space 是 Unity 中的一个枚举类型,可指定变换操作相对于哪个坐标系进行
  • 解释: Space.World 表示变换操作是相对于世界坐标系进行的。这意味着游戏对象将绕着世界坐标系的 Y 轴旋转,而不是相对于自身坐标系的 Y 轴旋转

假设调用 transform.Rotate(Vector3.up, Space.World) 时传入了旋转角度90,那么游戏对象将绕世界坐标系的 Y 轴旋转 90 度

csharp 复制代码
transform.Rotate(Vector3.up, 90, Space.World);
相关推荐
骁的小小站40 分钟前
Verilator 和 GTKwave联合仿真
开发语言·c++·经验分享·笔记·学习·fpga开发
kkkkk0211061 小时前
软考高级-系统架构设计师案例专题三:系统开发基础
笔记·系统架构
颜颜yan_4 小时前
UU远程——让工作、学习、娱乐跨设备无缝衔接,“远程”更像“身边”
学习·娱乐·远程工作
新子y5 小时前
【小白笔记】区分类方法/实例方法和静态函数/命名空间函数
笔记·分类
梁辰兴6 小时前
企业培训笔记:外卖平台后端--套餐管理模块--新建套餐信息
笔记·vue·mybatis·springboot·外卖管理系统
degen_6 小时前
第一次进入 PEICORE 流程
c语言·笔记
YJlio6 小时前
Process Monitor 学习笔记(5.24):工具栏参考与高效快捷键指南
笔记·学习·php
deng-c-f6 小时前
Linux C/C++ 学习日记(30):协程(一):同步和异步、协程的简要介绍、用户态CPU调度的实现
学习·协程·同步/异步
摇滚侠6 小时前
Spring Boot 3零基础教程,WEB 开发 Thymeleaf 核心语法 笔记39
spring boot·笔记·后端·thymeleaf
张人玉7 小时前
WPF 常用样式属性及示例笔记
笔记·wpf