为NPBehave而生的可视化编辑器介绍
介绍
什么是NPBehave?https://www.lfzxb.top/npbehave_doc/
使用到的库
ET:一个基于C#的游戏客户端,服务端框架!
Node_Editor_Framework:一个强大的可视化工具!
Odin:Unity编辑器拓展神器!
编辑器截图
这是一个官方例子的可视化版本
支持导出配置文件,供客户端或者服务端读取
运行结果与官方示例一致
使用方法
1.在Unity编辑器的菜单栏,选择Tools/其他实用工具/多功能可视化编辑器即可进入编辑界面
2.然后这样可以创建一个Canvas
3.随便找个空地进行右击
4.鼠标左键点击某一个数据结点即可在Inspector面板显示其包含的数据
5.然后按照自己想要的结果把他们连接起来
6.鼠标左键点击一个空地,即可调出导出配置界面,然后即可进行导出工作。
7.最后在代码里创建自己想要的行为树,Start即可,其中的ID即为我们导出配置时上面显示的根节点ID!
12NP_RuntimeTree npRuntimeTree = NP_RuntimeTreeFactory.CreateNpRunti ...
理解并实现LOL中的攻速机制
前言
攻速机制是Moba游戏中非常重要的机制之一,他会和状态机制,Buff机制产生联系,但是网上却少有详细介绍攻速机制并实现的文章,故有此文。
名词定义
因为为了描述清楚攻速机制需要有一些专有名词,为了避免歧义,本文中的名词及其相关释义如下所示(下面提到的所有概念均为我们逻辑层概念,和动画没有任何关系)
基本攻速:也即基础攻击间隔(BAT)的倒数,即两次攻击之间的间隔时长,比如一个英雄BAT为0.5,即0.5s攻击一次,那么它的基本攻速就是2,大部分英雄基本攻速不一样
攻速收益:对于攻速加成的实际转换比例,比如一双攻速鞋+35%攻速,如果一个英雄攻速收益是50%,那么他真正获得的额外攻速就是17.5%,大部分攻速收益不一样
额外攻速:是指通过Buff,装备,技能,等级成长获得的攻速,计算公式为:额外攻速 = 额外攻速加成 * 攻速收益
总攻速:计算公式为:最终攻速 = 基本攻速 + 额外攻速
基础攻击前摇:攻击打出伤害之前的时间段,在此时间段中对攻击指令进行主动/被动取消都将终止此次攻击,并且没有伤害,大部分英雄基础攻击前摇不一样
攻击前摇:计算公式:基础 ...
实现行为树黑板模块0GC赋值功能
引言
因为行为树中的黑板模块可以存储任意类型的数据,并且默认是以System.Object存储的,所以我们在进行赋值的时候,难免会出现装箱的情况,偶尔的一次装箱也没什么,如果是每帧的装箱。。。不会真有人能忍吧,不会吧,不会吧,不会吧
再多说几句,目前我在使用行为树做技能编辑器,之所以可能会出现上面说的每帧的装箱的情况,是因为我打算把行为树中所有的关键数据都放到黑板中,这样有很多好处
方便状态预测/回滚
方便Debug,逐帧调试
方便满足策划的所见即所得需求
上面说的这些我会在实现之后再和大家分享,有兴趣的可以先关注我的开源Moba项目
正文
要实现黑板赋值的0GC,就是要把他的装箱那一步给去掉,所以理所当然的,我们要自己封装数据类型
基类
1234public abstract class ANP_BBValue{ public abstract Type NP_BBValueType { get; }}
12345public interface INP_BBValue<T>{ T GetValu ...
Box2D篇:基础知识整合
初入Box2D
创建Box2D物理世界
12// Vector2为x与y方向加速度World = new World(new Vector2(0, -9.8f));
明确换算单位
Box2D中的计量单位是米(m),而目前大部分的平台渲染都是基于像素px的,所以在进行渲染计算时,要注意对坐标或形状尺寸进行转换。通常 $$1m=30px$$
开启2D模拟
调用World.Step(float timeStep);函数进行世界的模拟与刷新。 注意Box2D中计时单位是秒,不是帧!
timeStep
每次调用刷新函数间隔,由于Box2D世界计时单位是秒,所以要进行转化。 比如你游戏想运行在60帧,即一秒刷新60次,每次耗时1/60秒,那么timeStep = 1/60;
初识刚体
什么是刚体
一个固态的物体,他至少包含看得见或者摸得着这两个特性之一。 b2Body是Box2D的核心类,是学习Box2D的基础,也是重中之重。
创建刚体
创建一个刚体,不单单是b2Body的事情,还要创建多个对象,包括b2BodyDef和b2FixtureDef对象,然后在这些对象的协同合作下,完 ...
Box2D篇:进阶知识整合(刚体操作,碰撞处理)
刚体操作
DestroyFixture(b2Fixture)
删除b2Fixture组件 通过b2World.Raycast和b2World.QueryAABB来获取要删除的b2Fixture组件
ApplyForce(force,point)
添加作用力到刚体上 force:要施加的力的大小,单位是N
point:要施加力的点,这是一个全局坐标(世界坐标)
ApplyImpulse(impulse,point)
添加冲量,单位是N*m。
ApplyTorque(Torque)
Torque:扭力大小,为正表示顺时针,为负表示逆时针,单位kg*rad/s
GetLoaclXXX,GetWorldXXX
用来实现本地坐标,向量和全局坐标,向量之间的转换
GetLocalCenter
获取刚体重心的本地坐标
GerWorldCenter
获取刚体重心的全局坐标
GetLoalPoint(worldPoint)
获取全局坐标点worldpoint在刚体坐标系统中的本地坐标
GetWorldPoint(localPoint)
获取本地坐标点localPoint在舞台坐标系 ...
Box2D篇:重要注意点
本博客记载使用Box2D过程中的知识点
只有两个刚体至少有一方为dynamic时才会发生碰撞
刚体旋转以重心为圆心进行,刚体旋转带动图形旋转
如果需要运动的刚体进行碰撞,AllowSleep要为false
Box2D篇:整合Box2D到项目,并支持导出数据到服务端
Box2D介绍
为游戏打造的2D物理引擎,就像Unity自带的2D物理引擎一样的功能
Box2D官网
http://box2d.org
白纸无字大佬整合的Box2D地址
https://github.com/Zonciu/Box2DSharp
绪论
因为服务端对某些技能进行击中判定,所以需要一个不依赖于Unity的物理引擎库,对于我做的Moba游戏,Box2D无疑是最佳选择。
如果是FPS游戏想在服务端做碰撞检测,需要3D的物理引擎库,因为你用2D物理引擎无法进行爆头,腰射这种判定。
具体步骤
下载白纸无字的Box2D
客户端配置
运行link.bat批处理命令
然后只需要将这几个文件放到项目的Plugins文件夹下面即可
服务端配置
同样的,我们在服务端创建Box2D项目
注意要开启允许不安全代码才不会报错
Box2D碰撞体数据可视化编辑器
https://www.lfzxb.top/box2d_unityvistualeditor/
Box2D碰撞体碰撞关系可视化编辑器
https://www.lfzxb.top/box2d_collisionrela ...
为Unity搭建完善的的Cmd工作环境
本文章已于2021.5.19更新,Monkey Commander支持指定自定义程序集,大幅优化了扫描程序集耗时。
前言
我们在使用Unity开发游戏的时候,往往会需要GM工具来测试游戏稳定性,在游戏中呼出对话框输入命令行执行对应GM代码是非常高效的(下图来自B站Up:https://www.bilibili.com/video/BV1v741187To)
此外,对于项目中不断增加的MenuItem编辑器拓展,每次使用工具都要去翻找对应的条目也是很麻烦的一件事,尤其是对于嵌套层次稍深的条目。。。
如果有个插件可以在Editor中输入Cmd执行对应MenuItem代码就好了,幸运的是上面提到的两个问题,我都找到了解决方案
正文
Runtime Cmd-UnityIngameDebugConsole
首先是我们Runtime的Cmd,推荐:https://github.com/yasirkula/UnityIngameDebugConsole 插件
下载之后我们只需要把
放到场景中即可
如果我们想要在游戏中根据命令执行某个方法(这是最简单直接的用法,同样还支持参数传递,返回 ...
ET篇:云端分布式服务器部署教程
本文章已于2021.9.7更新,更正ET 6.0的地址配置以及含义,新增Linux实操步骤
前言
对于Linux部署的实操部分,参见:https://www.lfzxb.top/recastnavigation-and-et-to-linux
正文
ET6.0版本配置
现在大多人用的都是云服务器,会将外网IP映射到内网IP(网卡IP),所以一般外网地址和内网地址都是内网IP。
实际上我试过将Socket绑定到云服务器的公网IP,会直接报错
但是服务端会将外网地址传递回客户端让客户端连接Gate,但是我们外网IP只能填服务器的内网IP,也就会导致客户端无法和服务端通信,所以我们要多做一列地址专门告诉客户端服务端的外网地址
总结一下
我们约定,服务器公网IP为192.168.0.1,内网IP为44.117.7.8
ET篇:使用FairyGUI进行开发的流程
本文章已于2021.8.31更新,新增为ET6.0而生的FGUI插件(Lua版本)安装与配置相关教程
本文章已于2021.1.29更新,新增为ET5.0而生的FGUI插件(Lua版本)安装与配置相关教程
环境准备
FairyGUI
官网:http://www.fairygui.com
编辑器下载:http://www.fairygui.com/product/
官方教程:http://www.fairygui.com/guide/
开发工具
Unity 2017.4
Rider 2018.3
ET5.0
感谢有招小弟的大佬吗的大力支持
Duke大佬的FairyGUI分支
链接:https://github.com/DukeChiang/DCET
Unity项目结构梳理
Hotfix部分
Asset/Bundles/FUI/Common_atlas0.png:会被打成AB包的FGUI图片资源(AB标签:Common.unity3d)
Asset/Bundles/FUI/Common_fui.bytes:会被打成AB包的FGUI布局数据(AB标签:Common_fui.un ...