游戏设计模式
前言本文为游戏设计模式的读书笔记,
架构,性能和游戏重访设计模式命令模式定义:1将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作。
理解1将命令封装,与目标行为解耦,使命令由流程概念变为对象数据
UML
要点
将一组行为抽象为对象,这个对象和其他对象一样可以被存储和传递,从而实现行为请求者与行为实现者之间的松耦合,这就是命令模式。
命令模式是回调机制的面向对象版本。
命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开。
命令模式的优点有:对类间解耦、可扩展性强、易于命令的组合维护、易于与其他模式结合,而缺点是会导致类的膨胀。
命令模式有不少的细分种类,实际使用时应根据当前所需来找到合适的设计方式。
使用场合
命令模式很适合实现诸如撤消,重做,回放,时间倒流之类的功能。
基于命令模式实现录像与回放等功能,也就是执行并解析一系列经过预录制的序列化后的各玩家操作的有序命令集合。
引申与参考
最终我们可能会得到很多不同的命令类。为了更容易实现这些类,定义一个具体的基类,包含一些能定义行 ...
unity 3d数学理论
向量定义
向量在Unity中用于表示方向和位移。一个向量由三个部分组成,即x、y和z轴的分量。
向量的大小(长度)是其在各个维度上的绝对值的总和,表示向量的长度或幅度。
向量的方向由其相对原点的角度和旋转角决定。
向量的几何意义是表示一个有向线段,其中箭头表示方向和长度。
在unity中用Vector3 代替
名称
概念
公式
unity实例
零向量
没有方向
(0,0,0)
Vector3.zero
负向量
让原向量乘以-1得到了相当于原向量来说的负向量
单位向量
长度为1的向量叫单位向量(1,1,1)
各个分量分别除以magnitude模长就等于单位向量
向量的模
向量的长度
向量的长度=sqr(x^2+y^2+z^2) //各向量的平方相加,再开方
Vector.magnitude
向量相加
各分量分别相加
a向量+b向量=c向量 a(x,y,z)+b(x,y,z)=c(ax+bx,ay+by,az+bz)
向量计算点乘概念点乘,也叫向量的内积、数量积。
描述了两个向量的相似程度,结果越大两向量越相似,还可表示投影。
向量a·向量 ...
文件与脚本MVC整理
前言作为一个unity 开放者来说,工程规范是及其重要的,而文件规范又占了一大部分
这文件规范就像一个个柜子一样,你正确放置物品的话下一次找到这个资源就很容易。
不想整理?你多人协作后就知道什么是痛苦了
命名规则Assets目录中的所有资源文件名(场景、脚本、预设、模型、网格、纹理、材质、精灵、着色器、音频剪辑、视频剪辑)均采用 大驼峰式命名法 ,即每一个单词的首字母都大写。且使用能够描述其功能或意义的英文单词或词组。
文件目录
目录
说明
ABRes
自定义资源目录,用于存放需要动态加载的AB包中的资源。职责类似于Artwork,需要热更新的放入该文件夹并打包.
Artwork
存放美术资源的目录(涵盖动画、模型、材质、Shader、UI、原图等等),最好通过 svn 外链或者 git submodel 的方式引入,同样在上面的目录少了一个策划的目录,其实一般就是一个 csv 目录,一般也是通过 svn 外链或者 git submodel 的方式引入
Editor
编辑器目录,存放扩展编辑器的代码,该代码可调用Unity Editor的API。该目录中的代码不会被打 ...
射线检测
前言对于游戏来说射线检测是区别于物理检测来说另一个重要的场景对象交互方式
概念直接上unity源码
1234567891011121314151617181920212223242526public struct Ray{ private Vector3 m_Origin; private Vector3 m_Direction; public Ray(Vector3 origin, Vector3 direction) { this.m_Origin = origin; this.m_Direction = direction.normalized; } public Vector3 origin { get => this.m_Origin; set => this.m_Origin = value; } public Vector3 direction { get => this.m_Direc ...
数据可持续化
【图文详解】Unity存储游戏数据的几种方法_unity存储数据的方法-CSDN博客
前言PlayerPrefs 用于存入磁盘本地的数据
ScriptableObject用于缓存固定的数值,打包用不了Json 可以写入磁盘如果数据需要在Web应用程序之间传输,则 JSON格式通常是首选,如果数据需要与其他系统进行交互,则XML格式通常是首选,因为它是一种通用的数据交换格式,被广泛使用。
PlayerPrefshttps://blog.csdn.net/qq_32175379/article/details/121199932
概念
PlayerPrefs是Unity自带的一种简单的键值(键即用于查找的关键字,值即存储的数据)存储系统,用于存储少量的游戏数据。
PlayerPrefs是基于本地文件存储数据的,数据以键值对的形式保存在本地磁盘上。
作用
PlayerPrefs主要适用于一些简单的游戏数据的存储,例如玩家的音效、音乐、难度等级等。使用PlayerPrefs可以方便地在游戏中读写这些数据。
可用于存储一些非关键性的数据,尤其在没有服务器的单机游戏中,游戏存档、分数排 ...
背包系统初体验
前言花了几天时间去磨这个背包系统,发现有很多可学习的点
在背包系统有以下知识点,包括但不限于
对于UI的综合应用,对于设计模式的综合应用,对于数据处理的综合应用,对于存储方式的应用,编辑器扩展的应用。
建立背包UI这一部分大量使用了UGUI的组件,是对于组件的灵活应用
UGUI框架
限定分辨率
在Canvas下
Canvas Scaler组件 -> UI Scale Mode -> Scale Whith Sceeen Size
Reference Resolution -> X 1920 Y 1080
确保界面在任意分辨率下有着正确的表现方式
创建背包空物体
创建空对象PackagePanel
在Rect Transform组件下的锚点点击Alt选中右下角的跟随父物体伸展宽高
顶部菜单
在顶部创建一个空对象Menus挂载
Horizontal Layout Group:
Content Size Fitter: 将Horizontal Fit 设置为Preferred Size
滚动容器
创建一个Scroll View
在Scroll Rect中可以 ...
U3d的移动
简介在unity3d中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position。
通过Transform组件移动物体Transform 组件用于描述物体在空间中的状态,它包括 位置(position), 旋转(rotation)和 缩放(scale)。 其实所有的移动都会导致position的改变,这里所说的通过Transform组件来移动物体,指的是直接操作Transform来控制物体的位置(position)。
Transform.Translate 该方法可以将物体从当前位置,移动到指定位置,并且可以选择参照的坐标系。 当需要进行坐标系转换时,可以考虑使用该方法以省去转换坐标系的步骤。
public function Translate(translation: Vector3, relativeTo: Space = Space.Self): void;
缺点:无优点:有一定的惯性感,同样8向平滑,
使用Horizontal与Vertical123456789101112void transMove_GetAxis(){ // ...
自我学习路线目标
前言本篇为自定义学习方向,对以前的学习资源的整理以及学习进度的发展
unity 学习方向【Unity3D】Unity3D 技术栈_unity 技术栈-CSDN 博客
(95 封私信 / 80 条消息) unity 游戏开发的学习流程是怎样的? - 知乎 (zhihu.com)
Unity 学习路线(精良整理\持续更新) - 知乎 (zhihu.com)
游戏开发完整学习路线,都在这里了 - 知乎 (zhihu.com)
GameDevMind/mds/1.基础能力/1.基础能力.md at main · gonglei007/GameDevMind · GitHub
2021 最新 Unity 学习提升书籍推荐,小白必看 (zhihu.com)
[教程汇总+持续更新]Unity 从入门到入坟——收藏这一篇就够了 - 知乎 (zhihu.com)
重点
游戏网络编程(帧同步和状态同步)
AB包
CPP
OS
UGUI
后续
shader 入门精要
三阶段:
一: c# UI 框架 MVC 框架 存储功能 设计模式 unity 3d 数学
二: Lu ...
ue学习路线
引擎
配置UE CPP
ue对比unity项目 : https://dev.epicgames.com/documentation/en-us/unreal-engine/parrot-game-sample-for-unreal-engine X
UE入门: https://www.youtube.com/watch?v=XRmn-EYt8wI X
网易ue教程: https://zhuanlan.zhihu.com/p/647108274 √
UE路径
水曜日鸡 https://zhuanlan.zhihu.com/p/659805638
大钊老师PPT https://zhuanlan.zhihu.com/p/1937270739192505484
模块路线 https://zhuanlan.zhihu.com/p/637519288
24游戏社招面经 - 知乎
最小实现
https://github.com/AstroWYH
每天读2-3篇文章
行业趋势
技术类
持续学习新技术
将大目标拆解成小目标
复盘总结
知识库
资料、笔记整理
软件库
分享 ...
unity 常见api
1、Event Function函数 事件函数
事件
作用
省流
Reset()
被附加脚本时、在游戏物体的组件上按Reset时会触发该事件函数
Start()
在游戏初始化时会执行一次
Update()
每一帧都会运行这个方法
FixedUpdate()
会在指定帧调用该方法多少次
LateUpdate()
晚于Update的运行顺序,但是FPS和Update是一样的
Awake() Start()
都是在游戏物体初始化运行一次,但是Awake的运行顺序高于Start的,并且只要脚本中存在Awake方法,则无论是否挂载了该脚本都会执行该方法
OnEnable():
当将物体的SetActive设置为true时就会自动调用调用该方法
OnDestory():
当关闭游戏则会调用该方法
2、Time类 时间类函数
函数
函数作用
Time.time
表示从游戏开发到现在的时间,会随着游戏的暂停而停止计算。
Time.deltaTime
表示从上一帧到当前帧时间,以秒为单位。【一般用来控制角色、动画的运动。 ...

