使用unity简单复刻无敌破坏王总结
国庆突发奇想想简单复刻一下无敌破坏王,这里写一些总结,希望也能对大家有帮助
游戏截图:
基本思路:
时间有限,也只是简单复刻,所以只实现破坏方块的功能,画面算是广义上的2.5D游戏吧。
素材的准备:
这里主要说一下建筑裂纹的生成:使用PS的拼贴滤镜可以有类似效果
人物代码:
跳跃:
-
为了使得跳跃的手感更加好也更加符合我们的直观感受,所以在跳跃的时候调整重力,即跳跃上升的时候减小部分重力,下降的时候加大部分重力 -
平地跳跃:
//重力调整, FallMultiplier与LowJumpMultiplier都是自己声明的变量
if (rb.velocity.y < 0)
{
rb.velocity += Vector3.up * Physics2D.gravity.y * (FallMultiplier - 1) * Time.fixedDeltaTime;
}
else if (rb.velocity.y > 0 && Input.GetAxis("Jump") != 1)
{
rb.velocity += Vector3.up * Physics2D.gravity.y * (LowJumpMultiplier - 1) * Time.fixedDeltaTime;
}
-
墙面跳跃:
- 当人物处于攀爬状态跳跃时,我们给人物一个反方向斜向上的速度,并且在极端时间内禁止玩家操控,这样也能优化手感并且更复合人的直观感受
- 判断方向:
- 推荐单独写一个接受方向的函数
- 也可以直接判断Sprite的翻转或者判断接触的是左墙还是右墙
碰撞检测:
- 碰撞检测方式多样,人物与地面墙面的碰撞检测我是直接用的射线检测。
- 射线检测传送门:https://blog.csdn.net/paradox_l/article/details/120688209
- 攻击的碰撞检测:使用相交球检测
鼠标检测:
-
使用一个bool变量MouseDown来判断鼠标是否按下,按下为true,松开为false -
点按与长按的检测,当MouseDown为true时开始计时,当大于某一个值时为长按 -
//鼠标检测
void mouseDetection()
{
if(Input.GetMouseButtonDown(0))
{
mouseDown = true;
mouseUp = false;
hitCount++;
/*hitCount的引入是为了记录上一次攻击状态,使得攻击动画播放连贯
比如玩家鼠标单击一次后,角色出左拳,下一次玩家单击时则根据hitCount播放出右拳的动画
*/
}
if(Input.GetMouseButtonUp(0))
{
mouseUp = true;
mouseDown = false;
}
if(mouseDown)
{
//click_time用于计时
click_time += Time.deltaTime;
}
else
{
click_time = 0;
}
longPress =(click_time > 0.3f)? true: false;
}
可破坏方块的代码:
游戏与代码下载
itch.io :https://craftx.itch.io/wrick-it
github:https://github.com/craft-l/Unity_project
ps:项目所用背景图片来源于武汉插画师@[小鱼JohnStone]
|