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);
相关推荐
UQWRJ44 分钟前
菜鸟教程R语言一二章阅读笔记
开发语言·笔记·r语言
YGY Webgis糕手之路3 小时前
OpenLayers 综合案例-轨迹回放
前端·经验分享·笔记·vue·web
遇见尚硅谷4 小时前
C语言:*p++与p++有何区别
c语言·开发语言·笔记·学习·算法
SkyrimCitadelValinor5 小时前
c#中让图片显示清晰
开发语言·c#
爱吃香蕉的阿豪5 小时前
SignalR 全解析:核心原理、适用场景与 Vue + .NET Core 实战
vue.js·microsoft·c#·.netcore·signalr
艾莉丝努力练剑5 小时前
【数据结构与算法】数据结构初阶:详解排序(二)——交换排序中的快速排序
c语言·开发语言·数据结构·学习·算法·链表·排序算法
jz_ddk5 小时前
[HarmonyOS] 鸿蒙LiteOS-A内核深度解析 —— 面向 IoT 与智能终端的“小而强大”内核
物联网·学习·华为·harmonyos
试着5 小时前
零基础学习性能测试第五章:Tomcat的性能分析与调优-Tomcat原理,核心配置项,性能瓶颈分析,调优
学习·零基础·tomcat·性能测试
老虎06276 小时前
JavaWeb(苍穹外卖)--学习笔记13(微信小程序开发,缓存菜品,Spring Cache)
笔记·学习·微信小程序
@蓝莓果粒茶7 小时前
LeetCode第350题_两个数组的交集II
c++·python·学习·算法·leetcode·职场和发展·c#