- 博客(17)
- 收藏
- 关注
原创 A*寻路
寻找最短路径并避开障碍物——A*寻路实现A*寻路的三种工作方式基本术语下面介绍几种与A*寻路相关的术语,从而方便更好地理解后面的内容。*地图:“地图”是一个空间,也可以称为“图”,它定义了场景中相互连接的可行走区域,形成一个可行走网络,A*在这个空间内寻找两个点之间的路径。*目标估价:是指在寻路过程中估算代价的方法。通过采用不同的目标估计方法,可以实现更为智能,有趣...
2019-10-14 16:39:29
590
原创 实现AI角色的自主移动——操控行为
Unity3D人工智能框架模型游戏UI的框架模型尽管每种游戏需要的AI技术都有所不同,但绝大部分现代游戏中对UI的需求都可以分为三级: 运动层:导航和寻路是运动层AI的主要任务,它们决定了角色的移动路径。当然具体的移动行为还需要动画层的配合。运动层包含的算法能够把上层做出的决策转化为运动。 决策层:决策层的任务是决定角色在下一时间该做什么。一般情况下,每个角色都有许多不同的行...
2019-10-08 17:58:56
2664
原创 Unity游戏开发学习之泛型与集合
泛型 集合泛型:public class Assets{private int[] assets;public Assets(int num){asssts=new int[num];}public void SetAsset(int index, int value){as...
2019-06-14 18:00:09
484
原创 Unity游戏开发学习之抽象类,接口,委托
抽象类 接口 委托抽象类:提供了部分功能的实现,但是不能被实例化的类,除了不能实例化和可能包含抽象方法两个特点,其余使用和正常类一样。public abstract class NPC //不能被实例化{//可以包含抽象方法:子类必须实现的方法public abstract void Say();}public class XiaoBa...
2019-06-13 23:08:27
685
原创 Unity游戏开发学习之封装,继承,多态
封装 继承 多态面试点:封装,继承,多态 值和引用类型的区别 什么是抽象类 什么是接口 抽象和接口的区别 什么是委托 重写和重载的区别封装,继承,多态封装:将类里面的成员变量的方法私有化,如果外界要访问,向外界提供一个统一访问的方法比如:public class Person{ private int age;...
2019-06-13 23:06:11
1049
原创 触发器,射线,鼠标控制移动,左移运算符
触发器//进入触发区域调用Private void OnTriggerEnter(collider other){{//离开触发区域调用Private void OnTruggerExit(collider other){}射线Void Start(){ //射线 Ray ray =new Ray(Vector3.up*3,Vector3.d
2018-02-02 15:45:30
218
原创 移动及爆炸力
子弹移动Private Rigidbody rBody;Void Strat(){ rBody=GetComponent(); //给力(只给一次力,才开始快,越来越慢) rBody.AddForce(tramsform.forwarf*100f);}Void Update(){ rBody.velecity=transform.forward*10
2018-02-02 15:13:13
193
原创 实例化,鼠标点击发生效果,碰撞体
预设体实例化脚本Public GameObject CubePre;Void Start(){ Instantiate(CubePre); //预设体,位置,旋转 GameObject go =Instantiate(CubePre,transform.position,Qunternion.identity;}Void Update(){ Dest
2018-02-02 14:48:44
644
原创 触摸输入及虚拟轴
手机触摸输入Public class TouchTest:MonoBehaviour{ Void Start() {//开始多点触摸Input.multiTouchEnabled=true; } Void Update() {//判断单点触摸If(Input.touchCount==1){ //打印出触摸位置 Debug.Log
2018-02-02 14:07:03
329
原创 键鼠输入,多个输入达到一个效果代码示例
键鼠输入Void Update(){ //键鼠输入 //任意按键按下 if(Input.anyKey) {按下会一直调用 } if(Input.anyKeyDown) {按下一次调用一次 } //监听按键 if(Input.GetKeyDown(KeyCode.Space)) {按下空格监听一次 }
2018-02-02 13:55:05
221
原创 api
常用apiMathf //绝对值 int n=Mathf.Abs(-1); //插值 Mathf.Lerp(0,10,0.1f); //限制数(把一个数限制在一个范围内) n=Mathf.Clamp(n,0,5);(当n不在范围内时,便会取离其最近的边界数) n=Mathf.Clamp01(n);(范围为0-1,则返回值为float)Time
2018-01-30 16:02:46
148
原创 组件 Vector3结构体
组件 两种组件:Runtime类型组件(正常组件,控制 游戏物体) Editor组件(对unity编译器进行拓展) Runtime类型组件脚本继承关系:MonoBehaviour:Behaviour:Component:ObjectVector 3结构体(x,y,z) 除了可以表示向量,也可以表示一个物体的位置,旋转,缩放 Vector 3=n
2018-01-30 13:36:43
724
原创 欧拉角与四元数
标量 有大小,没方向向量 有大小,也有方向 (在游戏中如果需要一根线一直有玩家指向NPC,则用NPC的向量减去玩家所在的向量)点乘,点积a(x1,y1)b(x2,y2)a*b=(x1x2+y1y2)=|a||b|cosa (可通过点乘的方法计算夹角,unity中存在upi,直接输入便可)叉乘:运算结果是一个向量,法向量a(x1,y1,z1) b(x2,y2,
2018-01-29 13:54:13
268
原创 文件操作
文件操作 Using system.IO; String path=@”D:\Test”;(文件夹路径)//是否存在文件夹 If(!Directory.Exists(path)) { //不存在创建文件夹 Directory.CreateDirectory(path); }//文件路径拼接1. path +=@”\1.tx
2018-01-29 13:22:44
226
原创 正则表达式(用于游戏账号登录)
正则表达式使用单个字符串来表示,匹配一系列符合某个语法规则的字符串,通常会被用来检索与替换某些文本。原文本字符:正常的文本:a,b,c...1,2,3...元字符:具有一些特殊意义的字符,是用来代替正常文本的字符{0}(占位符)。限定符:限定配备数量。元字符:1.. 匹配除了换行以外的任意字符。2.\w 匹配字母,数字,下划线,汉子。3.\s 匹配任意的空白符...
2018-01-29 12:58:43
1250
原创 输入
GetKey :用户长按按键有效GetKeyDown:用户按下按键时有效GetKeyUp:用户抬起按键时有效if(input.GetKeyDown(KeyCode.A)):表示按下A键时有效GetAxis(“Horizontal”)和GetAxis(“Verical”)水平和垂直 AnyKey:用于监听用户的任意按键输入或鼠标点击,事件触发后返回return.anyKe
2018-01-26 19:09:51
170
原创 生命周期
Reset第一次添加组件到游戏对象时会调用,或者在编辑模式下,手动设置组建地默认值。 Awake只会被调用一次,在Start方法之前被调用,主要用于字段值的初始化工作,禁用脚本,创建游戏对象,或者Resources.Load(Frefab)对象。 Start只执行一次,在Awake方法执行结束后执行,但在Update方法前执行,主要用于程序的UI的初始化操作,比如获取游戏对象或者组
2018-01-26 19:08:35
147
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人