《The Way to Go》阅读笔记
Chapter1
go语言的发展目标
结合静态语言的安全性和高效性,动态语言的易开发性。
注意,go是静态语言(静态类型语言)。是类型安全和内存安全的编程语言。通过goroutine来实现并发并行编程,通过channel来实现gorountine之间通信。
像其他静态语言一样执行本地代码,但依旧运行某种意义上的虚拟机进行垃圾回收,不需要开发人员考虑内存管理的问题。
语言的特性
没有类和继承概念,使用接口(interface)来实现多态性,函数是基本构件
使用静态类型,强类型语言,隐式的类型转换不被允许
通关后简单地评价一下P5R
写在前面
从最早17年看狗头人玩女神异闻录5,到17下半年自己攒钱买了显示器和缩水版的ps4slim在寝室里自己玩,再到19年皇家版游戏发售找代购入了收藏版,我终于在22年年初换了工作之后忙里偷闲地把它作为psn平台上的第一个白金游戏通关了。
前前后后五年间跟这个系列之间的故事自然也不少了,虽然至今为止也不能说自己是一个很合格的系列粉丝——并不是那种真的和系列一起长大的玩家,除了通关了第五代游戏和在系列上花了不少钱其实也没有什么拿的出手的粉丝证明,但是还是想在这里简单地记录一下皇家版与我之间的故事,并以不成熟的测评人身份说说我对皇家版的看法。
注意:本文可能含有大量剧透,请尚未以任何形式通关《女神异闻录》《女神异闻录5皇家版》的读者自行选择是否继续阅读。
计算机图形学中的四元数
四元数与欧拉角
以下内容主要是参考了Krasjet关于四元数的介绍《四元数与三维旋转》:“点这里阅读《四元数与三维旋转》”
会记录一些阅读过程中遇到的结论性内容,系统学习主要还是参考原文档为主
复数
1.3 复数相乘与2D旋转
与复数 \(z=a+bi\) 相乘代表着\(\begin{bmatrix}a & -b \\b & a \end{bmatrix}\) 矩阵所作出的变换,将矩阵中的每一个元素都除以模长,可以得到以下变换:
\[ \begin{bmatrix}a & -b \\b & a \end{bmatrix} = \sqrt{a^2+b^2}*\begin{bmatrix}\frac{a}{\sqrt{a^2+b^2}}&\frac{-b}{\sqrt{a^2+b^2}}\\\frac{b}{\sqrt{a^2+b^2}}&\frac{a}{\sqrt{a^2+b^2}}\end{bmatrix} \]
从复平面观察可以得到,\(\|z\|=\sqrt{a^2+b^2}\) 且有 \(\theta=\arctan(\frac{b}{a})\) ,原本的矩阵转换为了两个变换矩阵的复合,其中左边的\(\begin{bmatrix}\|z\|&0\\0&\|z\|\end{bmatrix}\)是缩放矩阵,而右边的\(\begin{bmatrix}\cos( \theta)&-\sin(\theta)\\\sin(\theta)&\cos(\theta)\end{bmatrix}\)则是2D旋转矩阵。
unity中的原生对象与托管对象
序
最初在工作中接触到引擎原生层相关的问题,是项目实现的延时执行模块,模块提供接口来进行委托的延时调用:
// 返回一个token用于后续的CancelDelayCall
m_DelayExecuteGuidance = GameFacade.CurrentGame.DelayCall(8.0f, OnPlayerGuideFinished);
// 延时执行的代码示例
private void OnPlayerGuideFinished()
{
// 作为MonoBehaviour的成员方法,访问gameObject
Debug.Log(gameObject.name);
// something else...
}
延时执行模块与协程不同,不会因为gameObject的销毁而取消执行,假设在指定的8s后,组件绑定的gameObject已经销毁,那么试图在访问时就会产生这样的报错:
可以看到延时模块仍然保留了对MonoBehaviour的引用,但在试图通过property访问gameObejct的时候发生了报错,且提示代码位置为“managed-to-native”,体现了本文的主体:引擎的托管(managed)代码对原生(native)代码的访问,下面我们就集中介绍Unity引擎中的原生对象与托管对象。
关于配置代码生成器的构想
需求
目前项目组的开发工作流中,读取表格配置需要重复较多机械性的工作:首先是字段的名称和类型规定上有一定的心智负担,在多种使用渠道(如client,server)下可能要认为进行多次同步,其次是完成读表代码也比较模式化,理论上这些工作都可以由工具提供辅助并最终由工具生成代码。
功能概览
- 将表格的所有字段在工具中显示,由用户来自定义表格属性:字段的类型,用途和默认值
- 工具能够将表格属性以json形式序列化,以json文件形式进行持久化存储
- 工具能够依据表格属性以及用户自定义的代码模板来生成读表代码
定义
表名:即配置文件的文件名
字段:即配置表中有实际用途的一列
读表代码:并不提供从资源文件中读取配置数据的功能,仅提供从配置数据解析出对应类型字段的功能