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);
相关推荐
军训猫猫头14 分钟前
20.抽卡只有金,带保底(WPF) C#
ui·c#·wpf
A懿轩A14 分钟前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
云边有个稻草人18 分钟前
【优选算法】—复写零(双指针算法)
笔记·算法·双指针算法
异次元的归来7 小时前
Unity DOTS中的share component
unity·游戏引擎
南宫生8 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__8 小时前
Web APIs学习 (操作DOM BOM)
学习
冷眼看人间恩怨9 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
向宇it10 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎
数据的世界0110 小时前
.NET开发人员学习书籍推荐
学习·.net
四口鲸鱼爱吃盐11 小时前
CVPR2024 | 通过集成渐近正态分布学习实现强可迁移对抗攻击
学习