本博客记载使用Box2D过程中的知识点
- 只有两个刚体至少有一方为dynamic时才会发生碰撞
- 刚体旋转以重心为圆心进行,刚体旋转带动图形旋转
- 如果需要运动的刚体进行碰撞,AllowSleep要为false
文章作者: 烟雨迷离半世殇
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 登峰造极者,殊途亦同归。!
相关推荐

2021-01-01
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在舞台坐标系统中的全局坐标 ...

2021-01-01
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对象,然后在这些对象的协同合作下,完成刚体的创建...

2019-08-01
Box2D篇:碰撞关系可视化编辑器
前言 我们在游戏中难免会有碰撞检测然后进行处理这一需求,那么,错综复杂的碰撞关系无疑就成了一大设计难点,规模和数量少点还好说,直接写在代码即可,规模一大,就需要借助excel的帮助下,但是也免不了使用true/false作为标识,在修改,拓展的时候麻烦,在读取数据的时候会造成不必要的空间浪费。(我明明没可能和这个东西碰撞,为什么还要单独给他一个bool字段呢?)。所以我就想着,能不能做个东西,稍微缓解一下这个问题,于是就有了今天这篇文章。 相关知识点 Node_Editor_Framework,开源地址:https://github.com/Seneral/Node_Editor_Framework Odin相关特性 Bson序列化反序列化数据 正文 先放一张编辑器图片 这就是使用了Node_Editor_Framework的编辑器,我们可以看到,在里面对不同的碰撞体进行了分组(分类)操作,然后根据需求进行连线即可。 至于数据的处理,我提供了很多一键傻瓜式按钮,只需要点一下就行。 创建数据 首先是Create Group,此操作将会创建一个Group,所有在此Group中...

2021-06-19
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_collisionrelationvisu...

2019-07-17
Box2D篇:在Unity开发Box2D可视化编辑器拓展
前言 我们需要把Box2D的碰撞体数据导入到服务端,然后让服务端读取这些数据,重建2D物理世界。那么,这些碰撞数据从哪来,怎么做的呢? Box2D官方手册里有提到两个比较出名的编辑器。 PhysicsEditor和RUBE 这两个编辑器都很出色,但是他们都有一个共同的痛点——编辑的碰撞体对于Unity不是所见即所得的。 还有比较特殊的应用场景,比如做Moba这种伪3D游戏,物理世界完全是可以用Box2D做的,但是,游戏里许多模型都是3D的,而PhysicsEditor和RUBE都只支持导入图片,所以也不妥当。 在仔细研究了官方文档后对比Unity自带的2D物理系统有很多共同点,我就想能不能借助Unity自身物理系统的力量做一个Box2D编辑器呢,这样可以所见即所得。 其实硬要说技术含量的话,在Odin的帮助下,这个可视化编辑器还真没啥技术含量。所以我在这主要说一下思路和历程,希望能对大家以后解决类似问题有帮助。文中代码尽量采用伪代码的形式,方便大家理解。 正文 先放出一张UML图,方便大家理解下面的代码 涉及到的相关知识点 - 编辑器拓展插件:Odin - 序列化反序列化:Bs...

2021-01-01
理解并实现LOL中的攻速机制
前言 攻速机制是Moba游戏中非常重要的机制之一,他会和状态机制,Buff机制产生联系,但是网上却少有详细介绍攻速机制并实现的文章,故有此文。 名词定义 因为为了描述清楚攻速机制需要有一些专有名词,为了避免歧义,本文中的名词及其相关释义如下所示(下面提到的所有概念均为我们逻辑层概念,和动画没有任何关系) 基本攻速:也即基础攻击间隔(BAT)的倒数,即两次攻击之间的间隔时长,比如一个英雄BAT为0.5,即0.5s攻击一次,那么它的基本攻速就是2,大部分英雄基本攻速不一样 攻速收益:对于攻速加成的实际转换比例,比如一双攻速鞋+35%攻速,如果一个英雄攻速收益是50%,那么他真正获得的额外攻速就是17.5%,大部分攻速收益不一样 额外攻速:是指通过Buff,装备,技能,等级成长获得的攻速,计算公式为:额外攻速 = 额外攻速加成 * 攻速收益 总攻速:计算公式为:最终攻速 = 基本攻速 + 额外攻速 基础攻击前摇:攻击打出伤害之前的时间段,在此时间段中对攻击指令进行主动/被动取消都将终止此次攻击,并且没有伤害,大部分英雄基础攻击前摇不一样 攻击前摇:计算公式:基础...
评论