自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

旮旯实验室GalaGame

石头的笔记本啊

  • 博客(41)
  • 收藏
  • 关注

原创 C#内存管理

这段代码中,顺序上,首先声明了变量 a,在后面的代码块(block 2)中声明了变量 b,当 block 2 代码块终止时,变量 b 便离开了作用域,然后外层的 block 1 代码块终止,a 也离开了作用域。在进程的虚拟内存中,有一个区域被称作堆栈,用来存储值类型数据,除此之外,在调用方法时,也是通过堆栈来存储传递给方法的参数副本。特殊的,如果编译器遇到一行代码中声明多个变量的情况,他们入栈的顺序就是不确定的,但是依然符合我们上面说的规律,只是作为同时进入作用域,同时离开作用域,谁先谁后其实并不重要。..

2022-08-13 13:23:03 1505 1

原创 关于Lua的那些问题(长期*没有*更新)

关于Lua编程语言的常见问题汇总,一起学习一起进步

2022-08-13 13:18:27 593

原创 NUnit进行单元测试的一般方法

快速,大量单元测试,毫秒级。独立,单元测试可以单独运行,不依赖文件系统或数据库等外部因素。可重复,单元测试的结果应该保持一致,总是返回相同的结果。自检查,在没有人工交互的情况下,自动检查是否通过测试。及时,与需要测试的代码相比,不应该在测试代码上花费过多不必要的时间(是否代码难以测试)。......

2022-08-13 10:24:30 398

原创 游戏编程模式 - 对象池模式

对象池模式是一种创建性模式,在对象池中包含了已经经过初始化并可以使用的对象,在用户需要时可以从对象池中获得对象并进行操作,当用户不需要时归还给对象池而非销毁对象。在实践中,我们通过一个简单的射击场景来模拟,子弹作为可重用的对象,如果在更新函数中检测射击动作并生成子弹,在击中目标或超出范围时销毁对象,则会在更新函数中频繁地进行 GC。类似第一种,但是将对象池的功能实现为抽象类,由每种类型的对象池继承,可以更清晰的找到对象与对象池的关系。对于可见游戏实体对象,视觉特效,数据结构等,在下面情况下会使用对象池。..

2022-08-12 14:55:31 541

原创 游戏编程模式 - Humble Object Pattern

在示例中,我们第一个版本实现了一个控制小球上下移动并带有限位的脚本组件,但是如果我们想对 Move() 方法进行测试,就需要处理此方法对 MonoBehaviour 的依赖,如果在测试时修改了对象的 transform 组件,则会产生副作用。并且为了写出可测试的代码,就要尽可能遵从更多的规则,从这方面考虑我们的代码也会更可靠。最后把分离后的 Bird 类补充完整,首先需要保存自己的控制器的引用,用自己作为控制器的构造函数的参数传入,并在 Update 中对输入进行处理,通过控制器进行移动的处理。...

2022-08-12 14:46:16 306

原创 游戏编程模式 - 原型模式、类型对象模式

在基于原型的语言中,对象并不是类的实例,而是每个对象都包含一个原型(prototype),而且,每个对象也都可以作为其他对象的原型存在。在 Self 中,通过 clone() 方法来的得到一个完全相同的新对象,并可以在新对象上添加附加的属性和方法(在“原型”中属性和方法(代表行为)更相似,而“类”中属性是属于对象的,而方法是属于类的)。原型模式在数据方面也有相应的应用,在创建如 json 数据文件时,对相同的数组字段,完全可以使用原型来处理,将所有重复的部分作为一个单一原型来重用。不知道将来会有什么类型。.

2022-08-12 14:40:24 492

原创 游戏编程模式 - 观察者模式

如果用观察者模式实现前面所说的“不适用飞行秘笈,脚不着地地完成一关”的成就,那么首先要明确的是,所有和成就相关的解锁,判断都是在成就系统模块内部完成的,而物理模块中“没落地”,以及技能模块中“没使用”的判断时机较难提供(所以在上面的例子中是在成就达成的位置,一关结束进行判断的),因此首先减少耦合最严重的部分,游戏循环在一关完成时,通知成就系统,而成就系统可以自己保存其他需要观察的模块的状态,并判断是否解锁相关的成就。当然,如果删除了观察者,而被观察对象还保留着观察者的引用这种情况,是要进行处理的啊。...

2022-08-12 14:38:27 492

原创 游戏编程模式 - 命令模式

这样的好处是,我们的命令对象不仅可以响应玩家的输入,而是可以根据传入的对象,控制任意一个需要被控制的对象,AI 也可以简单地提供命令对象来执行。玩了《武士刀·零(Katana Zero)》,游戏在每一个场景结束,都会有一个“录像带”的功能,即对成功通关的操作进行回放,而且会将“子弹时间”取消掉,这种功能的实现,就可以使用命令模式。而在 Lua 中,函数第一类值,上面的命令模式可以直接使用闭包来实现,换言之,在某些方面,命令模式对于没有闭包(或者不好用的闭包实现)的语言来说是模拟闭包的一种方式。...

2022-08-12 14:16:37 488

原创 游戏做好了,那下一步呢 - 打包发布

游戏在上传和打包到 Apple Store 的总结文章,可以从流程上了解相关内容。

2022-08-12 14:11:44 676

原创 随便看看官方教程-FPS Microgame

Unity 推出的一套免费教程,看了以后我差点就以为我能做游戏了!这个教程属于非常基础的给入门的小朋友学习的工程,虽然流程很短,项目也很小巧,但贵在完整。

2022-08-12 13:32:25 714

原创 由Canvas引起的脱发

查了半天原因,发现是个八竿子打不着的点,Canvas 设置的 Render Mode,渲染在摄像机上,开始按钮的触发区域有偏移,摄像机移动之后甚至没法点击按钮了,时灵时不灵,突出了一个玄学。

2022-08-12 13:16:24 96

原创 控制反转和依赖注入

代码的功能化与模块化。修改某一部分的代码,不应该导致其他意外的位置出现错误。依赖注入(Dependency Injection, DI)通常会与控制反转(Inversion of Control, IoC)一同出现,从去年接触了一点框架的时候,才听到这个新鲜东西,说起来,他们其实是一回事。...

2022-08-12 13:05:25 132

原创 游戏声效知多少-Unity

音效真的很重要,好的背景音乐环境音效甚至可以当作 dlc 卖(误(虽然我在做 gamejam 的时候基本都不会考虑声音,玩游戏的时候,也完全可以不开声音……(请让我水一篇。

2022-08-12 12:03:44 694

原创 聊聊 lua 和 PICO-8

0x00先两句话说说都是啥!lua 在上一篇有过介绍了,是速度最快的嵌入式脚本语言之一。而今天提到的这个 PICO-8 是使用了基本符合 lua 语法的脚本语言的开发平台,被称作 fantasy console 的平台,不仅包含了代码,精灵图像,声效音乐的编辑器,还集成了发布到论坛,导出 html,甚至是导出 .png 格式文件,没错,整个游戏就存放在这一张图片之中,这也是为什么,PICO-8 开发的游戏被称作卡带的原因了。之前,我硬着头皮自己报名了机核网与 clockwork 联合举办的 Game

2020-05-19 00:13:20 915

原创 Lua, 从入门到接着入门

0x00之前,有介绍过如何使用 Moonsharp 在 c# 工程中加载 Lua 脚本,而这一篇,打算关注于 Lua 脚本本身,介绍 Lua 的基础,入门教程(下面就是毫不严谨的介绍与分类)。Lua 是种被广泛应用的嵌入式脚本语言,使用脚本语言可以显著缩短传统的“编写,编译,链接,运行”(edit-compile-link-run)的程序开发过程,通常,脚本是解释运行而非编译,以易学易用的姿态解决一些简单任务。如今,脚本语言更是可以在计算机系统的各个层级都能见到,并且在许多方面,高级语言与脚本语言的界限

2020-05-19 00:10:54 335

原创 Unity Animation System 动画播放控制

0x00这是又一次翻以前的代码,用协程写了控制动画播放的逻辑,比如通过时间,检测动画是否播放完成等等。为了更加通用的场景,这次决定用 Animation Event 来实现,进行尝试。前面有用过一个 UIEventListener 的脚本组件作为 UI 对象统一添加事件,感兴趣可以点这里去看看……0x01在开发过程中,判断一个动画是否播放完成是一个常见的需求,如何在 Unity 中处理这些,首先来解决这些小问题:控制播放流在 Animator 组件中,播放特定动画片段animator.P

2020-05-19 00:09:40 761

原创 还记得特性和反射吗(一)

Attribute,特性,是可以为代码提供额外信息的方式,同时也可以为代码标记信息并由外部读取,以此影响被“修饰(decorating)”的代码的使用方式。一些例子:Attribute 通过 System.Attribute 类进行派生,要注意的是要将定义的特性应用到什么类型的目标(类,属性或其他)是否可以对同一目标多次应用。另外在特性应用到类或接口上时,是否由派生类和接口继承,必选和可选参数而这些也是通过应用特性来进行配置:AttributeUsageAttribute,其中 At

2020-05-19 00:07:23 175

原创 MoonSharp 从一知到半解(5)

0x00MoonSharp 是一个支持使用 C# 调用 Lua 的类库,这个系列是通过官网的教程来入门类库与 Lua。如果有需要请配合我的代码食用。一知半解系列最后一篇,撒花。ps:零散的知识点 - Asset 使用。0x01 Coroutines学习过 Lua 的语法的小伙伴们都知道,在 Lua 中原生提供了协程,开箱即用。除非你在“sandbox”模式下故意移除 coroutines 模块……UsagesCLR 代码创建协程,可以通过 script 对象的 CreateCoroutine

2020-05-19 00:06:34 370

原创 MoonSharp 从一知到半解(4)

0x00MoonSharp 是一个支持使用 C# 调用 Lua 的类库,这个系列是通过官网的教程来入门类库与 Lua。如果有需要请配合我的代码食用。这次的从一知到半解只讲 MoonSharp 的 Debug部分,做一个专一的 blog 吧。0x01 Debugger integrationMoonSharp 提供了两个开箱即用的调试器:VS Code (更简单易用,但相应地只支持本地进行调试)在支持 Flash 的浏览器中运行的远程调试器VS Code debugger需要安装扩展Mo

2020-05-19 00:05:48 556 1

原创 MoonSharp 从一知到半解(3)

0x00MoonSharp 是一个支持使用 C# 调用 Lua 的类库,这个系列是通过官网的教程来入门类库与 Lua。如果有需要请配合我的代码食用。0x01 Proxy objects处于安全性和兼容性的考虑,使用 Proxy Objects,将实现细节封装,保证 API 不会调用任何不应调用的字段,让内部实现与 API 独立,因此可以在不破坏脚本的情况下修改内部的实现。为了不让封装 API 过于复杂,MoonSharp 提供了一种脚本 DTO,也就是 Proxy Objects.DTO(Data

2020-05-19 00:02:27 409

原创 MoonSharp 从一知到半解(2)

0x00MoonSharp 是一个支持使用 C# 调用 Lua 的类库,这个系列是通过官网的教程来入门类库与 Lua。如果有需要请配合我的代码食用。本来以为可以搞定后面几章,但是没想到,就肝了一章,溜了溜了……溜了溜了……系列的第一部分说了一大堆,主要是基本用法,同时,谢谢不懂 Lua 的小伙伴们的问题,也谢谢熟悉 Lua 的小伙伴们的解答。这一部分,我们要进入 C# 如何将类(Class)提供给脚本使用。0x01 Sharing objects让 Lua 和 C# 进行对话在默认情况下,一

2020-05-19 00:00:59 557

原创 Unity 中绘制线段

0x00两种方法,用于调试,还是用来在游戏中显示。0x01 测试场合为了一些测试目的,如判断 AI 的移动路径,是否在目标的视野范围以内等等,但这些用来测试可视化的表示,我并不希望在最终的展示场景出现,而 Unity 提供了这样的用来测试的方法,通过 Debug模块,还可以通过参数设置线的可见距离,以及是否开启深度测试等:Debug.DrawLine(pos1, pos2, color); // 绘制从点 pos1 到 pos2 的一条直线Debug.DrawRay(pos1, dir, colo

2020-05-18 23:51:06 1690

原创 通过 EventTrigger 使用 c# 事件

0x00 相当难过先说说题外话正常的 UI 事件是这样的(我的理解中):在 UI 对象上挂载脚本,脚本中处理对应的逻辑,比如:在处理指针按下,要在脚本中处理实现一个 IPointerDown 的接口。这看起来很直接,但是在使用中会让逻辑很分散。这就是让我相当难受的做法。而 EventTrigger 的做法类似,也是将一个实现了所有接口的脚本绑定在要触发事件的 UI 对象上,但是……他只触发一个特定事件。我不确定从 UI 在 EventSystem 中的实现是不是通过事件的方式(我以为是,需要学习一下

2020-05-18 23:49:31 1348

原创 MoonSharp 从一知到半解(1)

0x00MoonSharp 是一个支持使用 C# 调用 Lua 的类库,这个系列是通过官网的教程来入门类库与 Lua。如果有需要请配合我的代码食用。现在,在 Visual Studio 中建立 c# 工程,并安装 MoonSharp 2.0:新建工程在 Nuget 程序包管理器控制台输入“Install-Package MoonSharp”安装 MoonShap另外,如果在 Unity 中使用 MoonSharp 可以在 Github 找到示例。0x01 执行 Lua 脚本在 MoonS

2020-05-18 23:48:19 1219

原创 Unity 协程的执行逻辑

〇、同步等待异步协程同步协程并行协程一、同步等待是指,当调用了 yield return yieldInstruction 时,会根据不同的指令的不同,暂时挂起( suspend )协程,等待条件满足后,继续执行协程。yield return new WaitForSeconds(0.1f);同步等待的示意图如下:二、void Start(){ StartCoroutine(TestCoroutine());}IEnumerator TestCoroutine()

2020-05-18 23:45:47 474

原创 Unity 资源管理(Assets,Resources,AssetBundles)

0x00一下子看了太多,还是比较细地看的,因为是英文的文档如果不仔细读,感觉太容易左进右出了……现在来整理下能记住的,后面实际使用的时候再来完善。现在 unity 在推新功能,可定位资源管理系统( The Addresssable Asset System ),可以根据 Address 进行加载(本地或者服务器的)特定资源,并无缝连接多种资源管理模式。Resources.Load 和 AssetBundle( AB 包 )Resources 方法加载资源需要在 Asset/Resources 目录下

2020-05-18 23:41:32 1538

原创 c# 事件和委托,再也不忘了

0x00c# 中的委托和事件一直是记了忘忘了记,反反复复,头大的很……这次做一个系统的总结吧0x01 Delegate委托( delegate ),是一种存储函数引用的类型。声明一个委托与声明函数类似,区别在于不包含函数体,需要使用关键字 delegate。一个委托包含其可以引用的函数签名(返回类型和参数列表)。可以完成类似传递“函数指针”作为参数的操作,进行回调。在运行之前只有这个变量即可,而不需要知道调用的是哪一个函数的引用。定义一个委托类型声明该委托类型的一个变量将变量初始化为具有相

2020-05-18 23:39:31 153

原创 用 PlayerPrefs 来处理玩家偏好设置

PlayerPrefs 是 Unity 引擎提供的用来存储玩家偏好数据的模块,可在让运行时的数据,保存到下次开启游戏时使用。这种方法如果作为存档来用,很容易在本地对游戏进行篡改,会给玩家提供取巧的办法,降低游戏的生命力。所以 PlayerPrefs 主要作为玩家偏好设置的保存与加载,如果每次进入游戏都要调一遍设置,这谁受不了啊?而游戏内容的存档与加载不在本篇内,可以参考序列化反序列化的知识,以及解析 json 等内容,来实现游戏中的保存和载入。对于不同的系统会存储在不同的位置,而使用的方法比较简单,在想

2020-05-18 23:36:40 502

原创 Unity 时间方法执行顺序(生命周期)

0x00 Emmmmm有人用这个搞我,问我知不知道,在一个 update 函数中实例化了一个对象,那么这些函数在后续的几帧中的调用情况是啥样的,让我写个坐标轴,这谁受得了啊?(其他还有比方说 Unity 协程的原理,我看过,居然忘了!)所以今天我不管别的了就来看打印输出了,让脚本自己把每一帧,执行的函数,打印一下。其实网上有很多这样的讲解,但是看别人的科普终究不如自己实践,所以我决定花点时间从官方文档到写代码打印,理理清楚这些事件方法执行顺序( Order of Excution for event

2020-05-18 23:34:06 2192

原创 从多个按钮订阅相同方法(?)来看匿名方法

多个按钮绑定一个回调函数时……等等,回调?回调函数,或简称回调( Callback 即 call then back 被主函数调用运算后会返回主函数 ),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。事件处理函数。有这样一个需要,在脚本中对多个按键绑定处理方法,但是这些按钮的功能是很类似的,区别只在于一一对应的关系不同,分别操控不同的对象做相同的动作。因此在处理函数中只需要区分按下了哪一个按钮,并找到相对应的对象就可以了。但在绑定处理函数

2020-05-18 22:10:39 165

原创 来来来,用 C++ 写个有限状态机(一)

〇、先暂停我简单说两句啊一年前写的文章了,之前更新在 github pages 上,疏于管理,现在觉得还是把这些文档放在 CSDN 好了,自己看起来也方便。2020.5.18 十元有限状态机是一个很常用的技术,在流程控制和游戏AI中都比较实用,因为状态机编程简单又很符合直觉。本文是参考《Programming Game AI by Example》从零开始使用C++搭一个状态机的轮子,主要有以下几个点:我会在搭建的过程中穿插一些C++知识的介绍,适合不甚了解C++或是状态机的小伙伴,手把手的编程

2020-05-18 22:08:39 1175 5

原创 Unity2018.2 连接 Android 设备调试

文章内容Sdk安装配置Unity 配置使用 VS 调试〇今天看到一句话,说的是现在程序员没有什么门槛,搜索引擎 + debug,程序就能写出来了。那么一个真正有价值的程序员是怎样的?有人说是利用编程解决实际问题,有人说是对自己对工作在技能上的靠谱。其实我一直都没觉得自己是程序员,只是碰巧会写一点程序。那么我肯定不是真正有价值的程序员……我会满足于搜索引擎 + debug,能够...

2019-02-26 11:53:35 2075

原创 排序算法的那些事儿

〇、对于排序算法的考察是很基础的算法考察,而很多面试都会有手写代码的考察,因此这次总结中代码的实现用了伪代码。可以了解到:常见的排序算法算法的实现(最后来写这个引言,真是毫无生气啊……一、排序算法时间复杂度空间复杂度是否稳定冒泡排序О(n2n^2n2)О(111)是选择排序О(n2n^2n2)О(111)否插入排序О(n2n^2n...

2018-09-17 23:31:45 159

原创 机器学习二:最小二乘学习法

最小二乘学习法〇、目录主要包含了线性模型的最小二乘法理论推导,和python程序验证。一、原理推导回归问题(Regression)中最小二乘学习法(Least Square)是对模型的输出fθ(x⃗ i)fθ(x→i)f_\theta(\vec x_i)和训练集输出{yi}ni=1{yi}i=1n\{y_i\}_{i=1}^n的平方误差JLS(θ)=12∑...

2018-06-12 13:51:33 793

原创 机器学习一:机器学习概要

机器学习概要机器学习的典型任务:回归是指把实函数在样本点附近加以近似的有监督的模式识别问题。对一个或多个自变量和因变量之间关系进行建模,求解的一种统计方法。分类是指对于指定的模式进行识别的有监督的模式识别问题。异常检测是指寻找输入样本{x⃗ i}ni=1{x→i}i=1n\{\vec x_i\}_{i=1}^n中所包含的异常数据的问题。 常采用密度估计的方...

2018-06-12 13:49:05 322

原创 搭环境玩球-让AI来打游戏(TensorFlow、ML-Agents)

搭环境玩球-让AI来打游戏(TensorFlow、ML-Agents)〇、阅读本文阅读本文你能了解到1、配置 ML-Agents 运行官方例程2、CPU?GPU?玄学?一、配置 ML-Agents科学上网的小伙伴可以参考这里,和这里的两个视频。ML-Agents 的 Github 地址在这里。 ML-Agents 是一个开源的 Unity 插件,能使游戏成为...

2018-03-22 22:42:56 1643 2

原创 多搭点儿环境-TensorFlow

多搭点儿环境-TensorFlow〇、阅读本文阅读本文你能了解到 一、在 linux 平台搭建 TensorFlow 深度学习开发环境 二、在 win10 平台搭建 TensorFlow 深度学习开发环境在开始学习 TensorFlow 的时候,是在 PyCharm 里直接用了 WinPython-64bit-3.5.4.0Qt5 这个版本,用 PyCharm 里的包管理安装了...

2018-03-21 22:10:05 378 1

原创 TensorFlow学习笔记【三】 实现去噪自编码器(Denoising Autoencoder)

TensorFlow学习笔记【三】 实现去噪自编码器(Denoising Autoencoder)〇、一、自编码器的输入节点和输出节点的数量是一致的,通常希望使用少量稀疏的高阶特征来重构输入,并非直接逐个复制输入节点(废话)。自编码器就是可以使用自身的高阶特征来编码自己,也就是提取出数据的高阶特征,用高阶特征重新组合来重构自己,相当于学习了恒等式:y=x(1)(1)y=...

2018-03-17 15:11:50 1667

原创 TensorFlow学习笔记【二】 手写数字识别入门

TensorFlow学习笔记【二】 手写数字识别入门〇、文章总是改来改去,其实也是各个地方找到,看到的东西拿过来拼拼凑凑,主要还是给自己看的吧。主要结构是酱的: 第一部分 主要的算法解读; 第二部分 Python 代码的实现; 第三部分 对代码和细节的解读。一、模型构建 softmax 函数(归一化指数函数),能将任意一个含有任意实数的 K 维向量 z 投射到另一...

2018-03-07 22:46:34 326

原创 个人电子图书馆【一】通过豆瓣API获取图书详细信息

个人电子图书馆【一】 通过豆瓣API获取图书详细信息〇、随便写的话硬盘里的电子书已经达到了一定数量级,经常性的忘记自己存过什么书,想看的时候又去网上 down 了一份新的,久而久之,副本无数…… 网上有人说解决办法是都看了,看完删了……拜托完全没有解决好吗,就算我看得完,像我这种查阅多过阅读的人,到时候不是还会去 down 吗…… 所以,有没有一个有效的方法把这些堆在一起的,名字也乱七...

2018-03-06 22:58:11 3223 5

空空如也

空空如也

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

TA关注的人

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