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);
相关推荐
十年之少23 分钟前
异步编程——微信小程序
笔记·学习·微信小程序
L小李要学习26 分钟前
STM32学习
stm32·嵌入式硬件·学习
Q1860000000035 分钟前
PDF解析示例代码学习
学习·pdf
ForBigData1 小时前
【杂谈】Godot 游戏开发:有限状态机
游戏·游戏引擎·godot·游戏程序·个人开发·游戏开发·游戏设计
WDeLiang1 小时前
学习笔记 - Swfit 6.1 - 语法概览
笔记·学习·swift
手揽回忆怎么睡1 小时前
mongodb学习
数据库·学习·mongodb
arriettyandray1 小时前
Qt/C++学习系列之QTreeWidget的简单使用记录
c++·qt·学习
woshihedayu1 小时前
虚幻引擎使用AI行为树控制角色移动,没有播放动画蓝图的问题
游戏引擎·虚幻
LL1681992 小时前
SSM考研助手管理系统
java·服务器·开发语言·数据库·学习
红白小蛋糕2 小时前
《操作系统真象还原》第八章(1)——内存管理系统
汇编·笔记·ubuntu