SteeringBehaviors
简介
日轮啊!毁灭这些AI把!
本文为游戏人工智能编程案例精粹笔记。大部分代码最好还是直接下载他的源代码进行阅读。
强烈推荐直接看源码,不要看书,这书可能是因为我看的是翻译版?但是这本真的不行。
操作行为
部分变量介绍
Vector2D m_vVelocity; // 速度Vector2D m_vHeading; // 一个标准化向量,指向实体的朝向Vector2D m_vSide; // 垂直于朝向向量的向量double m_dMass; // 质量double m_dMaxSpeed; // 实体的最大速度double m_dMaxForce; // 实体产生的供以自己动力的最大力double m_dMaxTurnRate; // 能旋转的最大速率(弧度每秒)
Seek(靠近)
Seek行为返回一个操纵物体到达目标位置的力。
Vector2D SteeringBehaviors::Seek(Vector2D TargetPos){ Vector2D DesiredVelocity = Vec2DNormal ...
剑指Offer
第一天
剑指 Offer 09. 用两个栈实现队列
题解
/** * Your CQueue object will be instantiated and called as such: * CQueue obj = new CQueue(); * obj.AppendTail(value); * int param_2 = obj.DeleteHead(); */public class CQueue{ private Stack<int> _a, _b; public CQueue() { _a = new Stack<int>(); _b = new Stack<int>(); } public void AppendTail(int value) { _a.Push(value); } public int DeleteHead() { if (_b.Count > ...
Lua设计与实现读书笔记
简介
lua设计与实现的摸鱼笔记。主要是为了记录那些我觉得比较重要的东西。
本书的实现由为Lua5.1,后续可能会存在区别。
比如说Lua5.1的gc方式是三色标记,而后续是引用。
入门的话我推荐《Lua程序设计》搭配简介 · GitBook (shenjun-coder.github.io)进行学习。
同时后续也可以看一下云风的 BLOG (codingnow.com)。
基础数据类型
字符串
性能优化
因字符串拼接会产生新的字符串,所以会对性能上有所影响。
比如说:
a = os.clock()local s = ''for i = 1, 300000 do s = s .. 'a'endb = os.clock()print(b - a) -- 2.301
这段代码使用字符串拼接来生成新的字符串。
a = os.clock()local s = ''local t = {}for i = 1, 300000 do t[#t + 1] = 'a'ends = ta ...
xlua踩坑
打包AB包时XLua报错
和下面这个链接雀氏是同一个问题,但是我clear了五次莫名其妙又打包好了,我不能理解,我大受震撼。尤其是刚好在我搜出这个问题的时候,他打包好了??
解决XLua运行正常,但是打包出错问题_CoffeMilk的博客-CSDN博客_xlua 打包报错
emmylua使用xlua
因为emmylua的原理是:lua代码中通过local dbg = require("emmy_core") 主动加载 emmy_core.dll到宿主程序中,并启动调试内核代码。调试内核通过socket与IDEA/VSCode侧连接通讯。
一般情况下,都会重新自定义loader,这里emmy_core并不是一个lua文件,在加载的时候会报错,需要特判。
private byte[] MyCustomLoaderFormAB(ref string filepath){ if (filepath.Equals("emmy_core")) { return null; }}
调试的时候需要 ...
面试经历
盛趣 一面 B.W.B实习项目
Unity
Unity有几种光源
起手这个问题直接把我人都打麻了,瞬间开始紧张,后续问题基本都没答好。
方向光:Directional Light
点光源: Point Light
聚光灯:Spot Light
区域光:Area Light
Start和Awake有什么区别
Awake :始终在任何 Start 函数之前并在实例化预制件之后调用此函数。(如果游戏对象在启动期间处于非活动状态,则在激活之后才会调用 Awake。)
Start :仅当启用脚本实例后,才会在第一次帧更新之前调用 Start。
事件函数的执行顺序 - Unity 手册 (unity3d.com)
如果Animator连线太多如何处理
回答了分层处理之后还问有什么解决方案提到了Unity内置的状态机。
UnityEngine.StateMachineBehaviour - Unity 脚本 API (unity3d.com)
UGUI中锚点和中心点
基本布局 - Unity 手册 (unity3d.com)
万向节死锁
【Unity技巧】四元数(Quaternion)和旋转 ...
Dictionary源码解析
Dictionary源码解析
前置知识
Hash算法
散列函数(英语:Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。
所有的Hash函数都有如下一个基本特性:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具有确定性的结果,具有这种性质的散列函数称为单向散列函数。但另一方面,散列函数的输入和输出不是唯一对应关系的,如果两个散列值相同,两个输入值很可能是相同的,但也可能不同,这种情况称为“Hash碰撞”,这通常是两个不同长度的输入值,刻意计算出相同的输出值。输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不同的散列值。
常见构造Hash函数的算法:
直接寻址法:取key的某个线性函数值 ...
List源码解析
List源码解析
List构造器
public class List<T> : IList<T>, IList, IReadOnlyList<T>{ private const int DefaultCapacity = 4; internal T[] _items; // Do not rename (binary serialization) internal int _size; // Do not rename (binary serialization) private int _version; // Do not rename (binary serialization) private static readonly T[] s_emptyArray = new T[0]; public List() { _items = s_emptyArray; } // Constructs a List with a given initial capacity. The list ...
算法与数据结构
数据结构
链表
public class Node<T>{ public T Value; public Node<T> Next; public Node(T value) : this(value, null) {} public Node(T value, Node<T> next) { Value = value; Next = next; }}
二叉树
public class TreeNode<T>{ public T Value; public TreeNode<T> Left; public TreeNode<T> Right; public TreeNode(T value) { Value = value; }}
前序遍历
递归版
public void PreorderTravers ...
CS面试基础知识
语言基础
闭包
详细有关内容可以阅读猫哥blog。
C#委托与匿名方法内存分配总结 | 仙猫洞 (cathole.top)
其实闭包这个概念,对于大部分人其实已经很清晰了,我一开始甚至觉得这玩意也不需要记录,直到我看到了这段。
function newCounter() local count = 0 return function() count = count + 1 return count endendc1 = newCounter()print(c1()) --> 1print(c1()) --> 2
还能这么玩??之后我就测试了一下C#那边,虽然我个人觉得也是可以的,但是还是要测一下。
public class Solution{ public static void Main(string[] args) { Solution solution = new Solution(); var test = solution.Test(); ...
公共语言基础结构
公共语言基础结构
CLI的定义
C#不会直接生成机器码,而是生成公共中间语言(Common Intermediate Language,CIL),之后CIL被转换成处理器能理解的机器码。
但如果要执行代码,仅仅转换为机器码是还不够的。还需要在一个代理的上下文中执行。负责C#程序执行的代理就是虚拟执行系统(Virtual Execution System,VES),也称为运行时。它负责加载和运行程序,并在程序执行时提供额外的服务(比如安全性、垃圾回收等)。
CIL和运行时规范包含在一项国际标准中,即公共语言基础结构(Common Language Infrastructure,CLI)。
CLI标准包含以下更详细的规范:
虚拟执行系统(VES,也就是运行时)
公共中间语言(Common Intermediate Language,CIL)
公共语言规范(Common Language Specification, CLS)
公共类型系统(Common Type System,CTS)
元数据(Metadata)
框架(Framework)
CLI术语缩写
缩写
定义
说明
...