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

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.dtcms.com/a/200965.html

相关文章:

  • 基于tar包安装,创建两个tomcat实例
  • 测试自动化开发框架全解析
  • 没有保安工作经验,如何备考初级保安员证的实操考试?
  • 【第二届帕鲁杯】第二届帕鲁杯畸行的爱完整wp
  • Python 实现图片浏览和选择工具
  • AT_abc401_d [ABC401D] Logical Filling 题解
  • SDC命令详解:使用get_libs命令进行查询
  • 如何使用VCS+XA加密verilog和spice网表
  • JUC入门(三)
  • Unity 本土化插件 I2Localization
  • 需求频繁变更?AI 驱动的自动化解决方案实践
  • 【Fifty Project - D28】
  • chirpstack v4版本 全流程部署[ubuntu+docker]
  • Java Spring Boot 应用集成 Spring Security 使用 Redis 存储用户信息
  • 小白的进阶之路-人工智能从初步到精通pytorch的基本流程详解-1
  • 深入解析Spring Boot与Spring Cloud在微服务架构中的最佳实践
  • nginx日志
  • 人员管理2302版本
  • CVE-2022-22963源码分析与漏洞复现
  • 类autosar的os系统实现
  • 说一下响应状态码有哪些?
  • 语言幻觉测试用例及相关策略总结
  • SAP学习笔记 - 开发13 - CAP 之 添加数据库支持(Sqlite)
  • plc基础知识整理(三菱)
  • SVN与蓝盾流水线
  • 依赖错误终结者:AI 项目管理中的故障排查指南
  • python训练营day29
  • C++类与对象--5 运算符重载
  • 【Canvas与图标】圆角方块蓝星CSS图标
  • 纯前端实现图文识别 OCR