自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 资源 (9)
  • 收藏
  • 关注

原创 AI复刻街头霸王到 Unity

基于Unity 2021.3 LTS开发的2D街霸格斗游戏项目,纯内置模块实现,无第三方依赖。涵盖角色控制、连招系统、动画状态机、打击判定及完整HUD界面,代码结构清晰,适合初学者学习与二次开发。项目已开源,支持快速克隆体验,助力开发者掌握格斗游戏核心机制。

2026-09-09 21:21:48 236

原创 15.Unity面向对象-其他设计模式

本文概述了游戏开发中常用的15种设计模式,包括适配器、享元、双缓冲、脏标记等核心模式。这些模式分别解决了不同场景下的开发需求,如对象适配、性能优化、数据管理、行为扩展等。每种模式都通过简明的定义和游戏开发中的实际应用案例进行说明,为开发者提供了高效解决常见问题的参考方案。这些设计模式涵盖了从底层数据优化到高层系统架构的多个层面,能够帮助开发者构建更灵活、可维护的游戏系统。

2026-03-30 11:44:43 146

原创 14.Unity面向对象-MVC

MVC/MVP设计模式将应用程序分为模型(数据)、视图(界面)和控制器/展示器(逻辑)三层,实现关注点分离。在Unity开发中,MVP变体更常用,由展示器作为中间人处理模型与视图的交互。通过示例展示了生命值系统的实现方式:Health类作为模型存储数据,HealthPresenter处理逻辑并更新UI。这种模式适合大型项目,可实现团队分工、简化测试和提高可维护性,但需要前期规划且并非所有Unity组件都适用。开发者应根据项目规模和复杂度权衡是否采用该模式。

2026-03-30 11:44:09 258

原创 13.Unity面向对象-观察者模式

观察者模式是游戏开发中实现松耦合通信的常用解决方案。该模式通过"一对多"依赖关系,让主题对象在状态变化时自动通知所有观察者对象,而无需直接引用它们。C#通过事件机制内置实现了这一模式,包含发布者(主题)、订阅者(观察者)和事件处理器三部分。Unity还提供了UnityEvents系统作为替代方案。该模式特别适合处理游戏事件(如敌人死亡、物品收集等),优点包括解耦对象、简化调试,但也需注意性能开销和取消注册等问题。改进方案包括使用ObservableCollection、传入唯一ID、创建

2026-03-30 11:43:36 363

原创 12.Unity面向对象-状态模式

本文介绍了游戏开发中有限状态机(FSM)的实现方法。首先展示了使用switch语句的简单实现,但指出其扩展性差的问题。然后详细讲解了状态模式解决方案,通过将每个状态封装为独立类(IState接口),实现状态行为的解耦。文章提供了StateMachine类的实现代码,说明如何管理状态转换,并以IdleState为例展示了具体状态类的编写方法。这种设计遵循SOLID原则,使添加新状态时对现有代码影响最小化,提高了系统的可维护性和扩展性。

2026-03-30 11:43:11 345

原创 11.Unity面向对象-命令模式

命令模式是一种将方法调用封装为对象的设计模式,适用于实现撤销/重做功能或操作序列控制。核心思想是通过创建实现ICommand接口的命令对象(如MoveCommand)来封装操作逻辑和撤销逻辑,由CommandInvoker统一管理执行栈。该模式支持操作延迟执行、历史记录和回放功能,适用于游戏开发中的移动系统、连招系统等场景。虽然会增加代码结构复杂度,但提供了灵活的操作控制能力,可通过扩展命令类型、添加重做栈、使用不同集合等方式进行功能增强。

2026-03-30 11:42:38 367

原创 10.Unity面向对象-单例模式

摘要: 单例模式是Unity开发中常见但争议较大的设计模式,它确保类只有一个实例并提供全局访问。虽然便于实现中心化管理(如游戏管理器),但因其易滥用导致全局状态、测试困难和紧耦合等问题,常被视为反模式。文章介绍了简单单例、持久化改进版和泛型实现方法,并指出其优缺点:单例简化小项目开发,但不利于大型项目维护。建议谨慎使用,仅限必要场景(如对象池),避免过度依赖。

2026-03-28 01:25:40 311

原创 9.Unity面向对象-对象池

对象池是一种优化技术,通过预创建和复用对象来减少频繁创建销毁带来的性能损耗。文章介绍了对象池的基本原理:维护一组可重用对象,使用时激活而非实例化,使用后禁用而非销毁。通过Unity示例代码展示了简单对象池的实现方式,包括对象池初始化、获取和回收对象的方法。还讨论了Unity 2021内置的对象池系统(UnityEngine.Pool)及其优势,如支持堆栈式管理、容量控制等。对象池特别适用于需要频繁生成销毁对象的场景(如子弹系统),能有效减少垃圾回收造成的卡顿,提升游戏流畅度。

2026-03-28 01:24:44 292

原创 8.Unity面向对象-工厂模式

工厂模式是一种创建型设计模式,它通过专门的工厂对象来封装产品对象的创建过程。该模式的核心在于定义一个产品接口(IProduct)和抽象工厂类(Factory),由具体工厂子类负责实例化特定产品。产品实现统一接口但包含各自独特的初始化逻辑,如粒子效果或音效播放。这种模式的优势在于提高代码可扩展性和可维护性,特别适合需要动态创建多种类型产品的场景(如游戏中的敌人或道具生成)。虽然会增加类数量带来一定复杂度,但通过遵循SOLID原则,可以建立清晰的层级结构,使系统更易于扩展和修改。模式还支持与对象池等其他模式结合

2026-03-28 01:24:04 302

原创 7.Unity面向对象-SOLID总结

SOLID原则是面向对象设计的五大核心准则,包含:单一职责(类只做一件事)、开闭原则(可扩展不改源码)、里氏替换(子类可替代父类)、接口隔离(精简接口功能)和依赖倒置(依赖抽象而非实现)。这些原则能提升代码的可读性、灵活性和可维护性,尤其适用于大型项目。虽然初期可能需要更多设计工作,但长期收益显著。开发者应灵活运用这些原则,避免过度设计,必要时结合KISS(保持简单)原则。SOLID不是绝对规则,而是指导编写高质量代码的重要方法论。

2026-03-28 01:23:37 34

原创 6.Unity面向对象-接口与抽象类

本文探讨了C#中抽象类和接口的选择策略。抽象类适合定义"is a"关系,支持字段、静态成员和访问修饰符,能实现代码共享;接口则提供灵活性,支持"has a"关系,允许多重实现。关键区别在于:抽象类可包含实现和变量,而接口仅声明成员。实际开发中可组合使用,如用抽象类继承核心功能,通过接口扩展外围能力。选择取决于具体需求,抽象类侧重代码重用,接口强调设计灵活性。

2026-03-28 01:22:34 209

原创 5.Unity面向对象-依赖倒置原则

本文阐述了依赖倒置原则(DIP)在软件设计中的应用。DIP强调高层模块不应直接依赖低层模块,而应通过抽象接口进行交互。文章通过游戏开发案例说明:原始设计中Switch类直接调用Door类方法,导致紧密耦合;通过引入ISwitchable接口,实现了Switch与Door的解耦,使Switch能控制任何实现该接口的对象。这种设计提高了代码的可扩展性和可维护性,符合SOLID原则中松耦合、高内聚的目标。依赖倒置原则能有效降低模块间的直接依赖,便于系统功能扩展。

2026-03-26 20:12:09 222

原创 4.Unity面向对象-接口隔离原则

摘要:接口隔离原则(ISP)强调不应强迫客户端依赖其不使用的方法,提倡将大接口拆分为多个小接口。通过游戏开发实例说明,将单位属性拆分为IDamageable、IMovable等独立接口,使类只需实现所需功能。例如爆炸桶只需实现IDamageable和IExplodable接口,避免继承冗余方法。该原则通过接口组合实现解耦,提升系统灵活性和可维护性,与单一职责原则和里氏替换原则思想一致。

2026-03-26 20:04:39 132

原创 3.Unity面向对象-里氏替换原则

摘要:里氏替换原则(LSP)强调派生类应能完全替代基类。文章通过车辆游戏示例说明,当Train类无法实现Vehicle基类的转向方法时即违反LSP。建议通过接口分离功能(ITurnable/IMovable),采用组合而非继承,将车辆分为RoadVehicle和RailVehicle两种类型来解决问题。指出现实世界的"是"关系不一定适合直接转化为继承结构,软件设计应优先考虑代码的扩展性和灵活性。

2026-03-26 19:59:14 458

原创 2.Unity面向对象- 开闭原则

这工作得很好,但如果你想向AreaCalculator添加更多形状,你需要为每个新形状创建一个新方法。修订后的AreaCalculator类现在可以获取任何正确实现抽象Shape类的形状的面积。你希望对扩展开放(使用新形状的能力)而不修改原始代码(AreaCalculator的内部)。你可以创建一个名为Shape的基类,并创建一个方法来处理形状。每次你需要一个新的多边形,只需定义一个继承自Shape的新类。你可以创建一个名为AreaCalculator的类,其中有返回矩形和圆形面积的方法。

2026-03-26 19:36:20 208

原创 1.Unity面向对象-单一职责原则

本文介绍了Unity开发中的单一职责原则(SRP),强调每个类应该只承担一个职责。文章通过对比未重构和重构后的Player类,展示了如何将多功能的类拆分为专注于单一功能的小组件(如PlayerAudio、PlayerInput、PlayerMovement)。这种设计提升了代码的可读性、可扩展性和可重用性。虽然遵循SRP需要前期投入更多工作,但能显著降低后期维护难度。文章最后指出"简单不等于容易",建议开发者平衡设计原则与实用性,创建专注且易于维护的代码结构。

2026-03-26 19:25:12 267

原创 如何让Unity JsonUtility支持数组列表的序列化和反序列化

该死的Unity JsonUtility 默认不支持数组列表的序列化和反序列化,好多项目选择放弃使用,转而使用Litjson,newtonsoft-json等三方库,但是如果开发一个三方库,不想依赖过多的其他库,就会很难受。

2025-02-25 11:25:25 568

原创 demo多场景运行切换工具

curvy插件中的,很好用using UnityEngine;using System.Collections;using UnityEngine.UI;using FluffyUnderware.DevTools.Extensions;using System.Collections.Generic;#if UNITY_EDITORusing UnityEditor;

2018-01-13 11:32:25 959

原创 Unity Editor 编辑器扩展 十五 提取NGUI 的Transform ResetPosition 功能

NGUI虽然不怎么在项目中应用了,但是里面这个ResetPosition功能还是非常好用的,可以拿出来在新项目中,实测可用代码放进Editor文件夹里面就可以用了using UnityEngine;using UnityEditor;[CustomEditor(typeof(Transform))]public class TransformInspector : Editor{ /

2018-01-04 15:38:43 1499

翻译 1.2设计模式在Unity中应用—Behavioral Pattern— Command Pattern 命令模式

Command Pattern 命令模式DefinitionParticipantsCommandConcreteCommandClientInvokerReceiver责任链模式代码结构案例1加减乘除计算器可以执行撤销 重复 命令Command Pattern 命令模式DefinitionEncapsulate a request as an object, thereby le

2017-12-25 19:21:28 535

翻译 1.1设计模式在Unity中应用—Behavioral Pattern— Chain of Responsibility Pattern 责任链模式

设计模式在Unity中应用—Behavioral Pattern— Chain of Responsibility Pattern 责任链模式DefinitionAvoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Ch

2017-12-22 14:58:17 480

翻译 Emacs 快速指南

Emacs 快速指南Emacs 快速指南.(查看版权声明请至本文末尾)【注意:位于【】之间的内容是译注,比如本行,下同。】Emacs 键盘命令通常包含 CONTROL 键(有时候以 CTRL 或 CTL 来标示)和 META 键(有时候用 EDIT 或 ALT 来标示)。为了避免每次都要写出全名,我们 约定使用下述缩写:C- 表示当输入字符 时按住 CONTROL 键。

2017-11-01 21:34:28 711

转载 Unity Editor 编辑器扩展 十四 将TortoiseSVN的基础操作内嵌Unity

集成svn同步工具,非常好用/* * 将TortoiseSVN的基础操作内嵌Unity * 这里只是举了几个简单的例子 * 具体命令可参见TortoiseSVN的help功能 * */ using UnityEngine; using UnityEditor; using System.Diagnostics; public class UnitySVN {

2017-01-23 13:14:24 1546

原创 Shader自学笔记 3.4.1 shader实现photoshop 中颜色混合模式

photoshop中的功能其实是封装了图形学算法,所以理论上其中的功能都可以用unity shader实现,下面模拟一下photoshop颜色混合模式中著名的加色模式和减色模式,也就是模拟自发光物体显像原理和反射光显像原理。 下面是一些常见混合模式计算公式: 上面的计算Unity已经封装,但是看看计算方法更有助于理解。Shader "Unity Shaders Book/Chapter 8/

2017-01-21 04:24:32 5519 2

原创 Shader自学笔记 3.3.2 采样遮罩纹理 使高光部分更加柔和

// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'Shader "Custom/texture/test4" {// 定义纹理属性 增加法线纹理 Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Main

2017-01-17 01:50:40 1214

原创 Shader自学笔记 3.3.1 采样渐变纹理应用于BlinnPhong光照模型

Shader "Custom/texture/test1" {// 定义纹理属性 Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Main Tex", 2D) = "white" {} _Specular("Specular",Color)=(1,1,1)

2017-01-17 01:12:50 812

原创 Shader自学笔记 3.2.2用世界空间计算法线纹理

// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'Shader "Custom/texture/test3" {// 定义纹理属性 增加法线纹理 Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Main

2017-01-16 04:03:48 998 1

原创 Shader自学笔记 3.2.1 用切线空间计算法线纹理

// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'Shader "Custom/texture/test2" {// 定义纹理属性 增加法线纹理 Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Main

2017-01-16 03:31:01 1754

原创 Shader自学笔记 3.1.1 采样纹理加入到光照模型中

Shader "Custom/texture/test1" {// 定义纹理属性 Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Main Tex", 2D) = "white" {} _Specular("Specular",Color)=(1,1,1)

2017-01-16 01:46:15 472

原创 Shader自学笔记 2.2.3 BlinnPhong光照模型

Shader "Custom/two/LightModel6" { Properties { _Diffuse ("Diffuse", Color) = (1,1,1,1) _Specular("Specular",Color)=(1,1,1,1) _Gloss("Gloss",Range(8.0,256))=20 } SubSha

2017-01-15 07:35:30 554

原创 Shader自学笔记 2.2.2 逐像素高光反射光照模型

Shader "Custom/two/LightModel5" { Properties { _Diffuse ("Diffuse", Color) = (1,1,1,1) _Specular("Specular",Color)=(1,1,1,1) _Gloss("Gloss",Range(8.0,256))=20 } SubSha

2017-01-15 07:18:43 581

原创 Shader自学笔记 2.2.1 逐顶点高光反射光照模型

Shader "Custom/two/LightModel4" { Properties { _Diffuse ("Diffuse", Color) = (1,1,1,1) _Specular("Specular",Color)=(1,1,1,1) _Gloss("Gloss",Range(8.0,256))=20 } SubSha

2017-01-15 06:51:06 683

原创 Shader自学笔记 2.1.3 半兰伯特光照模型实现

// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'Shader "Custom/two/LightModel" { Properties {// 定义Color类型属性

2017-01-15 05:50:42 918

原创 Shader自学笔记 2.1.2 逐像素漫反射光照模型实现

// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'Shader "Custom/two/LightModel" { Properties {// 定义Color类型属性

2017-01-15 05:36:22 548

原创 Shader自学笔记 2.1.1 逐顶点漫反射光照模型实现

Shader "Custom/two/LightModel1" { Properties {// 定义Color类型属性 _Diffuse ("Diffuse", Color) = (1,1,1,1) } SubShader { Pass{ Tags{"LightMode"="ForwardBase"} CGPROGRAM

2017-01-15 05:09:46 585

原创 Shader自学笔记 1.3 使用属性控制渲染效果

Shader "Custom/one/simple shader" { Properties{// 声明Color属性 _Color("Color",Color)=(1.0,1.0,1.0,1.0) } SubShader { pass{ CGPROGRAM //定义顶点函数 #pragma verte

2017-01-15 02:49:06 584

原创 Shader自学笔记1.2 结构体作为函数的参数和返回值

Shader "Custom/one/simple shader" { SubShader { pass{ CGPROGRAM //定义顶点函数 #pragma vertex vert //片元函数 #pragma fragment frag// 使用结构体来定义顶点着色器的输入

2017-01-15 02:30:32 927

原创 Shader自学笔记1.1 Hello Shader

对Shader一直比较感兴趣,开启学习,顺便把学习过程在此记录,程序猿在开启任何新语言的学习都会Say hello,好吧,今天表示正式和Shader问好 Hello Shader!Shader "Custom/one/simple shader" { SubShader { pass{ CGPROGRAM //定义顶点函数 #pr

2017-01-15 01:34:22 633

原创 一个时钟显示小程序

显示时钟using UnityEngine;using System;public class ClockAnimator : MonoBehaviour { private const float hoursToDegrees = 360f / 12f, minutesToDegrees = 360f / 60f, secondsToDegr

2016-12-25 01:27:02 2496

原创 Unity Editor 编辑器扩展 十三 自定义创建资源

目录初级资源创建中级资源创建更自由的自定义资源创建初级资源创建Editor文件夹下创建脚本:using UnityEngine;using UnityEditor;public class CreateTest{ [MenuItem ("Assets/Create ExampleAssets")] static void CreateExampleAssets ()

2016-12-22 04:16:04 5674

WarrenMondeville uned1 LoadSourceEditorFile

WarrenMondeville uned1 LoadSourceEditorFile

2016-11-27

WarrenMondeville uned5 EditorGUI

WarrenMondeville uned5 EditorGUI

2016-11-27

WarrenMondeville uned6 EditorWindow

WarrenMondeville uned6 EditorWindow

2016-12-03

WarrenMondeville uned7 CreatAssets

WarrenMondeville uned7 CreatAssets

2016-12-11

WarrenMondeville uned8 Undo

WarrenMondeville uned8 Undo

2016-12-12

WarrenMondeville uned2 EditorPrefs

WarrenMondeville uned2 EditorPrefs

2016-11-27

OpenCVForUnity2.2.8

最新Unity插件 OpenCV

2018-05-14

WarrenMondeville uned3 InspectorAttribute

WarrenMondeville uned3 InspectorAttribute

2016-11-27

WarrenMondeville uned4 ScriptableObject

WarrenMondeville uned4 ScriptableObject

2016-11-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除