当前位置: 首页 > ops >正文

Unity开发:预制体、接口与枚举

一、预制体prefab与变体

在游戏场景中需要创建一些gameobject,然而如果要创建多个相同的gameobject的话,就得1个1个单独修改,在Unity中有一个很好的类---prefab预制体

1,预制体prefab(类)

在hierarchy里可以创建一些gameobject,可以拖动project里,然后project里就生成了一个prefab,hierarchy里的这个就成了蓝色的 表示是prefab相关的

2.变体prefab variant(子类)

除了创建多个独立的prefab, 还可以创建 prefab variant,变体prefab variant关联到了预制体prefab,同时变体可以独立修改,如下图:_BaseCounter是预制体,以下全是他的变体,每个都可以单独设置属性等等

预制体变体的特点

  • 继承性:预制体变体继承其基预制体的所有特性和属性,除非这些属性在变体中被显式地覆盖。
  • 定制化:可以对预制体变体进行定制,而不影响其基预制体及其其他变体。
  • 层级修改:对基预制体的修改会传播到所有基于它的变体,但变体中覆盖的属性除外。

二、接口

接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分。

接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构

声明接口

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public interface IKitchenObjectParent
{public Transform GetKitchenObjectFollowTransform();public void SetKitchenObject(KitchenObjectoo kitchenObjectoo);public KitchenObjectoo GetKitchenObjectoo();public void ClearKitchenObject();public bool HasKitchenObject();
}

接口实现

using System;
using UnityEngine;public class Player : MonoBehaviour,IKitchenObjectParent
{public Transform GetKitchenObjectFollowTransform(){return kitchenObjectHoldPoint;}public void SetKitchenObject(KitchenObjectoo kitchenObjectoo){this.kitchenObjectoo = kitchenObjectoo;}public KitchenObjectoo GetKitchenObjectoo() { return kitchenObjectoo; }public void ClearKitchenObject(){kitchenObjectoo = null;}public bool HasKitchenObject() { return kitchenObjectoo != null; }
}

三、枚举

1.枚举的作用

枚举enum是一种值类型,它定义了一组命名的常量

private enum Mode
{LookAt,LookAtInverted,CameraForward,CameraForwardInverted
}

LookAt,LookAtInverted,CameraForward,CameraForwardInverted是枚举成员,每个成员都有一个默认值(从0开始递增)

作用:让代码更具可读性

2.如何划分区间

枚举本身不会自动划分区间,区间的划分是通过代码逻辑实现的。具体来说,是通过 if-else 或 switch 语句来判断值的范围,并返回对应的枚举值。

以下是一个画布面向相机的例子

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class LookAtCamera : MonoBehaviour
{private enum Mode{LookAt,LookAtInverted,CameraForward,CameraForwardInverted}[SerializeField] private Mode mode;private void LateUpdate(){switch (mode){case Mode.LookAt:transform.LookAt(Camera.main.transform);break;case Mode.LookAtInverted:Vector3 dirFormCamera = transform.position - Camera.main.transform.position;transform.LookAt(transform.position + dirFormCamera);break;case Mode.CameraForward:transform.forward = Camera.main.transform.forward;break;case Mode.CameraForwardInverted:transform.forward = -Camera.main.transform.forward;break;}}
}

枚举的好处

可读性: 枚举通过有意义的名称来表示常量,使得代码更易于理解

类型安全:枚举是强类型的,避免了直接使用字符串或数字带来的潜在错误

易于扩展:如果需要增加新的范围,只需在枚举中添加新的成员,并在switch语句中处理即可

http://www.xdnf.cn/news/7167.html

相关文章:

  • 光子神经网络加速器编程范式研究:光子矩阵乘法的误差传播模型构建
  • 从单体到分布式:深入解析Data Mesh架构及其应用场景与价值
  • 【VMware】虚拟机运行 Linux Ubuntu、MAC 安装和配置
  • 整合安全能力:观测云进一步强化数据价值
  • 如何利用DeepSeek提升工作效率
  • 估分啦~全国青少年信息素养大赛部分赛项已考完~图形化/算法创意实践
  • PWM讲解+STM32任意频率、占空比、脉宽生成函数介绍
  • 2023年河南CCPC(ABCEFHK)
  • 算法第21天 | 第77题. 组合、216. 组合总和 III、17. 电话号码的字母组合
  • 探索 Python 的利器:help()、dir() 与 AI 工具的结合应用
  • Linux `touch` 命令深度解析与高阶应用指南
  • LangGraph深度解析:构建持久化、可观测的智能体工作流
  • Addressable-动态加载单个资源
  • DeepSeek 赋能基因编辑:从理论模型到临床实践的 AI 跃迁
  • 二:操作系统之进程控制块(PCB)
  • Redis实现分布式锁的进阶版:Redisson实战指南
  • Qt如何设置图标
  • Python3中的re.findall()和re.search()的区别是什么?
  • python学习day29
  • C++11关键字thread_local
  • 001 嵌入式软件开发工程师实习篇面试——首战总结
  • 使用 Auto-Keras 进行自动化机器学习
  • ElasticSearch-集群
  • 基于JAVA springboot+mybatis 电商书城平台系统设计和实现
  • day29 python深入探索类装饰器
  • FreeRTOS “探究任务调度机制魅力”
  • 数据清洗-案例
  • 浅谈迷宫类问题中的BFS和DFS
  • 【算法剖析】产值调整:从迭代到收敛,洞悉数字变化的本质
  • 【MySQL】(12) 事务