- 博客(136)
- 资源 (9)
- 收藏
- 关注
原创 演讲笔记 适合所有人的实用程序生成 PCG
近期翻到2017年GDC的一篇演讲——Practical Procedural Generation for Everyone,演讲者对PCG技术进行了简单的介绍,比较适合于想要了解PCG技术的人。
2022-07-23 16:03:26
890
1
原创 Unity3D Maze 迷宫生成算法
环境:Unity2021.1.14 语言:C#总起本文的源代码可以在以下网址的TestMaze中找到:https://github.com/anguangzhihen/TestOdinInspector《人工智能与游戏》关于PCG文章的末尾提供了一个生成迷宫的练习:Maze, a Unity C# Tutorial该练习对Unity中使用的常规技术讲解的十分详细,很适合刚接触Unity的新手,当然本文不会对Unity过多的展开。该工程的主要代码在TestMaze中,游
2022-05-22 10:40:34
2590
原创 读书笔记 PCG in Games 程序化内容生成4 分型、噪声和代理,地形生成
总起本文主要基于Procedural Content Generation in Games第四章介绍地形生成,给游戏角色提供可以站立的地面。关于PCG in Games之前的笔记可见:第一章读书笔记 PCG in Games 程序化内容生成 介绍 - 知乎第二章读书笔记 PCG in Games 程序化内容生成2 基于搜索的方法 - 知乎第三章读书笔记 PCG in Games 程序化内容生成3 构造性方法,针对地牢式关卡 - 知乎本章首先会介绍菱形方块分型算法和柏林噪声,
2022-05-02 12:35:43
1811
原创 Unity3D 参数曲线 实现曲线上的匀速运动
环境:Unity2021.1.14 语言:C#总起本文源代码可以在https://github.com/anguangzhihen/TestOdinInspector中的TestCurve场景中找到。Bezier曲线和Catmull-Rom曲线是工程中常见的曲线实现方式,他们本身原理十分简单,只是个多项式方程组,拿到公式带入就能实现。Bezier曲线和Catmull-Rom曲线之间可以相互转换,所以本篇内容只针对Bezier曲线进行说明,Catmull-Rom本质上是一样的。
2022-03-27 21:31:30
4942
原创 读书笔记 PCG in Games 程序化内容生成3 构造性方法,针对地牢式关卡
总起本文主要基于Procedural Content Generation in Games第三章介绍构造性方法,他们的主要用途在于地牢和关卡,这些方法能在极短进行生成,并且不会进行评估或重新生成。关于PCG in Games之前的笔记可见:第一章读书笔记 PCG in Games 程序化内容生成 介绍 - 知乎第二章读书笔记 PCG in Games 程序化内容生成2 基于搜索的方法 - 知乎地牢的概念来源于桌游《龙与地下城》,并成为RPG游戏的一大特征,包括《塞尔达传说》系列
2022-02-01 12:45:20
11572
原创 读书笔记 PCG in Games 程序化内容生成2 基于搜索的方法
总起本文主要基于Procedural Content Generation in Games第二章介绍PCG领域最重要的方法之一——搜索方法,而其中进化算法是我们主要使用的方法之一。关于PCG in Games第一章的笔记可见:读书笔记 PCG in Games 程序化内容生成 介绍 - 知乎关于进化算法介绍可见:Python 进化算法的简单介绍和实现 - 知乎OK,接下来进入正题,首先我们对本章内容进行概括。什么是基于搜索方法的程序化内容生成?定义:方案
2021-12-31 20:53:08
2888
1
原创 Python 进化算法的简单介绍和实现
总起文章中的源码可以在 GitHub - anguangzhihen/PythonTest 中的EvoGATest.py找到。进化算法(EA)是从达尔文的自然选择理论和现代分子遗传学获得灵感而发展出来的算法。使用进化算法的动机之一是它能提供一套具有鲁棒问题求解的算法,它已在大学课程编排、卫星天线吊杆设计、银行贷款建模、股票的交易模型取得一定的成果。所有进化算法都基于同一基本理念:由个体组成的种群在有限资源环境中,对资源的竞争导致自然选择现象的产生。特点:1.基于种群运
2021-12-19 15:46:06
2904
原创 Python A*算法的简单实现
总起A*算法常用于游戏的寻路中,用于求解静态路网中的最短路径,是最有效的直接搜索方法。这次正好花了几天时间学习了一下Python,便拿这个算法做了一下练习。这篇文章也会对其思路做一个简单介绍。文章中的源码可以在 GitHub - anguangzhihen/PythonTest 中的AStarTest.py找到。算法思路A*算法实际是由广度优先遍历和Dijkstra算法演变而来的:1.广度优先遍历主要是通过从起点依次遍历周围的点而寻找最优的路径;2.Dijkstra基
2021-12-11 16:16:02
14831
9
原创 读书笔记 PCG in Games 程序化内容生成 介绍
总起最近入手一本神书——《人工智能与游戏》,它介绍了AI与游戏相辅相成的关系,并且梳理了整个游戏AI的知识脉络。它可以当成游戏AI目录书籍,薄薄的一本书引用了800多篇文献。游戏中我们接触到的AI可能更多的是寻路算法(Navigation),而这个话题在这本书中属于玩游戏 -> AI可以怎样地玩游戏 -> 基于规划的方法 -> 传统的树搜索。不过介于市面上已经有很多关于寻路算法的书籍,如《游戏人工智能编程案例精粹》,所以它只是简单介绍了一下并没有展开说明。接下来我通过这
2021-11-20 17:25:27
4531
原创 Unity3D Editor ControlID 简单介绍
环境:Unity2021.1.14 Odin3.0.4 语言:C#面向:Editor开发人员总起当我在工具代码中看到这行代码时:GUIUtility.hotControl = id;我产生了一个疑问,ControlID是什么?在第19章 GUI を自作する - エディター拡張入門中的介绍也只是寥寥几笔:为每个GUI分配一个ControlID,此ID使每个GUI独立,如果没有正确分配这个ID,你最终会遇到多个GUI操作的冲突。比如当鼠标拖动GUI.Window时,范
2021-11-06 16:14:35
1091
原创 Unity3D Odin Inspector 简单介绍与入门
环境:Unity2021.1.14 Odin3.0.4 语言:C#面向:Editor开发人员总起从很早之前粗略了解Odin,看到它炫酷地Editor实现方式,到现在重度使用,慢慢的一个疑问缠绕在我心中。Odin究竟解决了一个什么问题?根据半年的使用经验,我尝试回答一下这个问题。Odin提供一整套Editor UI绘制的解决方案,大概有四个特点:以数据类作为核心绘制单元,通过打Attribute形式指定绘制形式; 100多个Attribute提供了庞大的绘制能力与
2021-09-04 13:06:03
1727
2
原创 Unity3D Editor Undo回退效果实现3 Odin相关
环境:Unity2021.1.14 Odin3.0.4 语言:C#面向:UnityEditor/Odin进阶开发人员总起我们在前两篇文章中讲解了Unity中Undo原理并进行了实现,这次我们来看看Odin是如何接入Undo。实际上Odin本身是基于Unity的IMGUI,所以它Undo的底层实现就是使用的Unity中的Undo。Odin实现Undo先来看看以下实现:using System;using Sirenix.OdinInspector;using Si
2021-08-22 16:52:27
689
原创 Unity3D Editor Undo回退效果实现2
环境:Unity2021.1.14 Odin3.0.4 语言:C#面向:Editor开发人员文章参考:http://49.233.81.186/undo.html总起前接上文,这次介绍一下组的概念和一个效果实现的实践。组的概念尝试以下代码:using Sirenix.OdinInspector;using UnityEditor;using UnityEngine;public class Test3 : MonoBehaviour{ public
2021-08-08 16:54:18
2161
3
原创 Unity3D Editor Undo回退效果实现1
环境:Unity2021.1.14 Odin3.0.4 语言:C#面向:Editor开发人员文章参考:http://49.233.81.186/undo.html总起因为Unity在用于中小型游戏开发的时候并不太需要对Editor进行深度扩展,而现阶段使用Unity进行大型游戏的开发比较少,所以Editor相关的资料相对匮乏。安藤圭吾的《エディター拡張入門》作为为数不多的Unity Editor入门经典,内容丰富,并且深入讲述了很多原理性的知识,非常值得一看。本文主要
2021-08-03 22:44:12
829
原创 Unity3D Odin Inspector Attribute回调的实现原理
环境:Unity2021.1.14 Odin3.0.4 语言:C#面向:Odin进阶开发人员问题在Odin Attribute的使用过程中,比如OnValueChanged,通常会传入一个字符串指定回调函数。通过字符串指定回调函数的方式是否能通过Odin的API主动调用?带着这样的疑问,我开始了探索。情况使用OnValueChanged的Attribute可以指定回调函数,在age值改变的时候会触发OnAgeChanged:public class Test1 : M
2021-07-22 13:07:55
668
2
原创 Unity3D 四元数插值的实现
环境:Unity2018.3 语言:C#总起:本文主要参考《3D数学基础:图形与游戏开发》。理论:幂:首先我们来看q^1/2,这是说明我们只需要q的一半位移,旋转是由θ来表示的,所以需要将w转换为θ(arccos(θ))后就能对其进行幂运算了。平滑插值Slerp:从q1到q2之间的差值为dq=inv(q1)q2,那么如果只需要t份dq,则表示为dq^t...
2019-06-01 20:04:49
1797
原创 Unity3D 四元数的常用方法
环境:Unity2018.3 语言:C#总起:本文主要参考《3D数学基础:图形与游戏开发》。四元数:负四元数:q=-q,同一个四元数有两个表示方式,他们互相为负。(下文只举四元数的一种形式)单位四元数:[1, 0],即cos(θ/2)=1,θ为4πk,则sinθ=0,不管轴是什么,不进行旋转就是本身。对应Unity中的Quaternion.i...
2019-06-01 17:20:48
2905
1
原创 Unity3D 四元数的理解
环境:Unity2018.3 语言:C#总起:本文主要参考《3D数学基础:图形与游戏开发》这本书。四元数的理解:♦复数首先我来考虑复数轴i,i的定义为i^2=-1。按照旋转的角度来理解的话,从1变换到-1,1实际上是旋转了180度到了-1。那么旋转90度呢?这个时候实际上就旋转到了复数轴上了,我们便用i来表示这个轴。在2维空间中事情比较简单。...
2019-05-31 22:46:59
1076
原创 Unity3D Behavior Designer 行为树4 打断机制的实现
环境:Unity2018.3 语言:C#上篇小作业解答:Behavior Manager在Disable之后直接运行会生成一个新的Behavior Manager。总起:行为树的节点不总是从上至下从左至右顺序执行的,在复合节点上有一个Abort Type参数。该参数可以决定复合节点下的条件节点状态发生变化时,是否能打断当前子节点(self)、优先级比自己低...
2019-04-28 22:15:30
2512
1
原创 Unity3D Behavior Designer 行为树3 不能被Disable的BehaviorManager及其神秘的TaskExecutionType
环境:Unity2017.4 语言:C#总起:今天想要探讨一下BehaviorManager的一些实现细节。这篇文章并不是单纯的新手教程,很多基础概念在文章内不会过多的赘述。内容根据一些疑惑和问题,写一些思考和解决问题的手段。当然最终是会有结论的。废话不多说,直接进入正题。不能被Disable的BehaviorManager?BehaviorMana...
2019-03-01 02:15:30
1497
原创 Unity3D Behavior Designer 行为树2 机制和小例子
环境:Unity2017.4 语言:C# 总起:上一章我们简单介绍了一下行为树,这一章带大家了解一下机制,最好是根据我的例子做一遍。 行为树是由Task任务节点组成的,而任务节点总共就四种分类:Composite,组合节点,将子节点进行一定规则的组合; Decorator,装饰节点,将一个子节点进行特定的操作; Action,行为节点,进行一个特定的操作; Condi...
2019-01-30 20:20:46
1618
原创 Unity3D Behavior Designer 行为树1 认识
环境:Unity2017.4 语言:C#总起:行为树,我很早就了解到了这个插件,不过对于它究竟是什么其实概念上比较模糊,这次正好趁机我们一起来学习一下(跟渲染一样AI也是个大坑)。本次教程基于插件内部的pdf文档,加上自己的理解,如果有不对的地方恳请大佬们指出。行为树应该是最为流行、成熟的一套AI解决方案了,虽然现在出现了更加强大的技术(决策树),不过这仍是主...
2018-12-31 15:01:23
1161
原创 DirectX11编程12 红龙书第九章练习
环境:VS2017 语言:C++ 附上工程的链接:https://github.com/anguangzhihen/Dx11。1.这边的程序都是以win64运行的;2.如果没有找到Common脚本,请到工程/属性/VC++目录中添加包含目录 “../Common”;3.如果没有找到libs,请到工程/属性/链接器添加附加库目录“../Common/libs”4.所有的练习...
2018-11-02 20:28:27
469
原创 DirectX11编程11 Blend混合
环境:VS2017 语言:C++ 总起:这一章主要对应红龙书的第九章。 工程地址:https://github.com/anguangzhihen/Dx11。主要以Chapter 9_1 Blend Demo作为讲解的基础。 本次的文章主要讲解三个知识点:Blend混合、Clip剪裁、Fog雾的实现。 首先我们不看Dx11中的Blend,我从Unity的常用的...
2018-11-02 19:49:11
2124
原创 DirectX11编程10 红龙书第八章练习
环境:VS2017 语言:C++ 附上工程的链接:https://github.com/anguangzhihen/Dx11。1.这边的程序都是以win64运行的;2.如果没有找到Common脚本,请到工程/属性/VC++目录中添加包含目录“../Common”;3.如果没有找到libs,请到工程/属性/链接器添加附加库目录“../Common/libs”4.所有的练习都...
2018-10-29 01:22:46
656
原创 DirectX11编程9 贴图的采样
环境:VS2017 语言:C++ 总起:这一章主要对应红龙书的第八章。 工程地址:https://github.com/anguangzhihen/Dx11。主要以Chapter 8_1 Crate作为讲解的基础。 首先让我们来看一下效果: 采样纹理:这一章主要是将“被采样的纹理”和“采样状态”在C++中创建好,然后传递到Shader。 以下创...
2018-10-28 11:25:32
982
原创 DirectX11编程8 红龙书第七章练习
环境:VS2017 语言:C++ 第七章的习题量少,也比较简单,不过我们还是来仔细研究一下 先附上工程的链接:https://github.com/anguangzhihen/Dx11。1.这边的程序都是以win64运行的;2.如果没有找到Common脚本,请到工程/属性/VC++目录中添加包含目录“../Common”;3.如果没有找到libs,请到工程/属性/链接...
2018-10-27 21:35:39
494
原创 DirectX11编程7 光照
环境:VS2017 语言:C++ 总起:这一章主要对应红龙书的第七章。 工程地址:https://github.com/anguangzhihen/Dx11。主要以Chapter 7_1 Lighting Demo作为讲解的基础。 首先说一下光照的重要性,在学习绘画的基础课程中有两个要点,一个是形,另一个就是光影的运用。好的光照不仅能提升场景的真实性,更加在氛围上做出...
2018-10-27 01:27:54
920
原创 DirectX11编程6 红龙书第六章练习
环境:VS2017 语言:C++ 在经过红龙书第六章大量的Demo之后,我们来到了第六章的练习题,基本上没有什么难度,但我们还是来看一下,了解更多的知识。 先附上工程的链接:https://github.com/anguangzhihen/Dx11。1.这边的程序都是以win64运行的;2.如果没有找到Common脚本,请到工程/属性/VC++目录中添加包含目录“../C...
2018-10-06 10:04:16
704
原创 Unity3D Coroutine嵌套问题 以原始的方式停止嵌套协程
环境:Unity2017.2 语言:C# 总起:在使用协程的时候大家有没有遇到这样的问题? 因为协程之间可以相互嵌套,所以为了保证程序的清晰,便在其中添加了大量的嵌套代码,但是在想要停止协程的时候傻眼了,MonoBehaviour的StopCoroutine函数只能停止最外层的协程,如果正在执行里层的协程,必须等待里层的协程执行完毕(如果里层有while循环,那协程就永远不会停...
2018-10-04 19:13:49
2546
1
原创 DirectX11编程5 渲染动态顶点
环境:VS2017 语言:C++ 总起:第六章剩下的Demo差别不是很大,基本没什么新的知识点,不过我都将其实现了,今天就专门针对Waves这个Demo说一些特别的东西。 工程在此:https://github.com/anguangzhihen/Dx11。 如果遇到工程不能运行的情况,请留言,我会尽快查明原因。 Waves Deme:该Demo主要是实现...
2018-10-03 20:48:29
799
原创 DirectX11编程4 渲染山地
环境:VS2017 语言:C++ 总起:红龙书的第六章Demo练习很多,我们一个个来。 工程,X_Jun96大佬建议放到Github上,现在的地址:https://github.com/anguangzhihen/Dx11。 以上一篇的基础来做渲染山地的Demo还是比较轻松的,山地或者水之类的东西实际上就是一个面片,使用顶点构建出面片之后,赋值高低的y坐标基本就完成了...
2018-09-29 21:49:40
322
原创 DirectX11编程3 初次接触HLSL 渲染一个方块
环境:VS2017 语言:C++ 总起:红龙书所使用的Effect库已经不建议使用了,所以这边在编译Shader所使用的是X_Jun96大佬手动的方式。 附上工程链接:https://github.com/anguangzhihen/Dx11。 红龙书本身是比较难以研读的,特别是对于初学者而言,它的一般做法是先将理论全部说一遍,然后讲一整个例子,没有由浅入深进行说明,...
2018-09-27 15:57:52
1005
原创 DirectX11编程2 红龙书第四章练习
环境:VS2017 语言:C++ 根据上一次的博文,龙书第四章后面有一些练习题,这边正好做一下。 先附上工程链接:https://github.com/anguangzhihen/Dx11。1.这边的程序都是以win64运行的;2.如果没有找到Common脚本,请到工程/属性/VC++目录中添加包含目录“../Common”;3.如果没有找到libs,请到工程/属性/...
2018-09-01 16:15:05
817
2
原创 DirectX11编程1 游戏循环框架的搭建
环境:VS2017 语言:C++ 总起:本次的博文主要参考红龙书(《Introduction to 3D Game Programming with Directx 11》)和X_Jun96大佬将DirectX SDK移植到最新的Windows SDK的博文:https://blog.csdn.net/x_jun96/article/details/80293670。 之前的...
2018-08-31 23:42:48
1643
1
原创 Unity3D Editor 编辑器扩展实战 脚本编译完成后设置回调函数
环境:Unity2017.2 语言:C# 总起:今天同事在做自动化的工具,需要在脚本编译完成之后回调一个函数。我在Google上找到UnityEditor.Callbacks.DidReloadScripts这个标签可以在编译完成后,Unity自动帮忙回调。 但是这样很麻烦,可不可以像是主动设置一个函数名称,等编译完成之后进行回调呢? 通过EditorPrefs对需要回调函数名的存储,我大体上完成...
2018-07-03 00:00:27
7396
1
原创 Unity3D Editor 编辑器扩展实战 Project窗口全文件夹折叠
环境:Unity2017.2 语言:C# 总起:在使用Project窗口时,总在不停地找资源和找代码过程中,将Project中的文件夹展开,导致窗口的混乱,虽然在按住Alt的情况下点击三角能够全部折叠一组的文件夹,但是这样做也比较麻烦。 所以有没有办法按下一个快捷键将所有文件夹全部折叠呢? 今天就为大家带来本人最新研究的一种对Editor的扩展(仅在2017版本中试验过,因为用到了反射技术所以不保...
2018-06-28 13:06:15
2734
1
原创 Unity3D Editor 编辑器扩展3 Editor脚本
Unity3D Editor 编辑器扩展3 Editor脚本环境:Unity2017.2 语言:C# 总起:在编辑Unity项目的时候,总不可能避免的接触到Unity自身自带的Inspector参数调整无法很好的完成某些特定功能的情况。 比方说想要一个按钮直接能跳到游戏的主界面进行调试,然而普通的情况下甚至连添加一个按钮都做不到。 这边推荐一下本人花了20几刀购买的插件——Odin Inspect...
2018-05-31 23:06:56
10183
原创 Unity3D UniRx ReactiveX响应式编程2 常用方法总结
环境:Unity2017.2 语言:C#总起:在正式讲UniRx技术之前,首先推荐一篇老外写的入门文章:https://zhuanlan.zhihu.com/p/27678951。看了以上文章后,应该会对UniRx用来做什么有一定了了解了。而我今天就将我这几天使用的几种常用方法列举一下,供大家编写程序时参考。个人非常喜欢Rx这种流式的编程方式,不过这种技术资料比较少,大家如果有相关文档什么的...
2018-04-30 23:23:29
2474
8
原创 Unity3D Editor 编辑器扩展2 选取物体、撤销操作和窗口小部件的显示
环境:Unity2017.2 语言:C# 总起:今天主要介绍以下内容:1.通过MenuCommand、Selection获取选中对象;2.通过Undo编写可撤销的命令;3.窗口小部件的显示。 MenuCommand:我们先来看一个点击增加血量的例子:[MenuItem("CONTEXT/PlayerInfo/Plus 5 Hp", false, 20)]public static void Pl...
2018-03-30 21:03:53
5266
3
Entitas 1.0.0正式版 Unity项目 源代码集成
2018-01-25
IOS XCode Device 9.3-10.3 XCode7.2所使用的真机文件
2017-11-14
Entitas简单移动项目
2017-09-06
Protobuf测试工程(包括Unity和Java服务端)
2017-05-12
unity java protobuf和其转换器整合
2017-02-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人