当前位置:蜗牛素材网>综合资讯>图文>正文

元气骑士unity教程:用unity实现俯视角射击是一种怎样的体验

人气:264 ℃/2023-12-17 05:47:09

作者:Yumir

哈喽大家好我是yumir。

最近沉迷元气骑士,自从官方把各种“bug”修复之后,这个游戏对我这种手残玩家来说实在是太难了。既然打不过,那我就自己写一个,不就是俯视角射击吗,分分钟给你搞定,一百行代码都不要。

要说用unity实现俯视角射击是一种怎样的体验,就是太简单了,要加上元气骑士,就不简单了。所以这次只是实现角色控制和手枪射击,总之“俯视角”和“射击”都有啦,也是个俯视角射击游戏了嘛。

具体步骤如下:

  1. 实现角色移动。
  2. 使角色和枪看向目标点。
  3. 实现带准星的射击。

实现效果

实现角色移动首先要有角色,虽然用方块就可以,但是这样就会显得没有诚意,为了更加有诚意一点我用之前学到的2D绑骨知识做了角色闲置和走路两个动画,这样角色移动的时候就不是平移的,而且还很省时省力【机灵】。

元气骑士是手游,角色移动是通过屏幕上的摇杆来控制的,现在在电脑上模拟游戏效果直接使用“WASD”来代替,摇杆也比较简单,下载一个easy touch插件就可以搞定了。

角色移动

首先需要给角色预制体挂载控制脚本以及碰撞器和刚体组件,调节碰撞器的大小并将刚体的重力设置为零。

在Update中获取键盘输入的"Horizontal"和"Vertical"的值,这两个值分别代表”A、D“和”W、S“的按下,正好形成一个二维坐标,可以用来计算移动的目标点。

movement.x = Input.GetAxis("Horizontal");movement.y = Input.GetAxis("Vertical");

在FixedUpdate中更新角色的下一个位置,也就是将上面的movement和角色当前位置相加。

rg.Moveposition(rg.position movement * moveSpeed * Time.fixedDeltaTime);

这样一来角色就可以像这样傻fufu的在地图里乱窜了。

让角色动起来

在角色身上添加一个Animator组件,并新建一个动画状态机,用骨骼动画的方法制作一个”点头“动画和一个”走路“动画,添加转换条件”walk“。

在角色的管理脚本中通过判断movement的值对walk的值进行修改,角色移动的动画就设置完毕了。

if (movement == new Vector2(0, 0))

{

playerAnima.SetBool("walk", false);

}

else

{

playerAnima.SetBool("walk", true);

}

向着鼠标

虽然这实际上是一个只有一面的角色,但是还是要营造出一种角色和手上的枪都是跟着鼠标走的错觉,首先需要让枪转向鼠标的方向,再来实现角色转向鼠标的效果。

枪转向鼠标比较简单,将鼠标位置和枪的位置的差归一化,其结果就是枪指向的方向,我的枪口正好是”枪“的右方,所以直接对枪的右方进行赋值。

Vector2 lookDir = target - (Vector2)weaponTrans.position;

lookDir = lookDir.normalized;

weaponTrans.right = lookDir;

角色转向鼠标的效果稍微复杂,首先我的角色预制体的内部层级是这样的:

之所以这样设计是因为枪的后坐力动画必须这样实现,如果要进一步增加游戏体量也需要将武器独立设计,也就是在左右翻转的时候我分别需要翻转角色的身体和持有的武器,武器需要变换位置。

if (rg.position.x > target.x)

{

body.flipX = true;

weaponTrans.GetComponentInChildren<SpriteRenderer>().flipY = true;

weaponTrans.position = p2.position;

}

else if (rg.position.x < target.x)

{

body.flipX = false;

weaponTrans.GetComponentInChildren<SpriteRenderer>().flipY = false;

weaponTrans.position = p1.position;

}

看向鼠标

准星射击

前面预制体层级里面可以看到我已经在预制体里面设置好了发射******的位置,只需要生成******之后让******向着枪口的方向飞出去就可以了。

我在脚本中声明了一个用来控制准星大小的变量,生成******的时候在枪的角度的基础上加上抖动角度。再给角色一个向右边(******的前方)的爆发力,就可以实现射击的效果了。

GameObject bullet = Instantiate(bulletPrefab, PlayerControl.instance.firePoint.position, PlayerControl.instance.firePoint.rotation * Quaternion.AngleAxis(Random.Range(0, sight), Vector3.forward));

bullet.GetComponent<Rigidbody2D>().AddForce(bullet.transform.right* bulletForce, ForceMode2D.Impulse);

为了使射击的效果更好一点,我加了特效动画,首先是射击时枪后座动画和射击喷火的动画在射击的时候触发播放,我的状态机是这样设计的:

在脚本中通过Animator.Play(状态名)调用。

******的碰撞触发是写在******预制体的脚本上的,当******发生碰撞时销毁自身并生成一个特效物体(该物体的动画最后一帧销毁自身)。

由于******飞出可能会碰到角色的碰撞器,所以需要判断碰撞到的物体的Tag标签再进行判断,注意******要勾选Trigger,不然会把玩家角色碰开。

public class Bullet : MonoBehaviour{

public GameObject hitEffect;

private void OnTriggerEnter2D(Collider2D collision)

{

if (collision.transform.tag != "Player")

{

Instantiate(hitEffect, transform.position, Quaternion.identity);

Destroy(gameObject);

}

}}

最后我增加了一个简单的镜头跟随,就是文章开头的效果啦,元气里的镜头是受摇杆影响的,有时间也来研究一下吧。因为Github上传不稳定所以以后都导包出来放网盘啦。

https://pan.baidu.com/s/1OREQu6OK0UPVe38Jr-Zb6w


欢迎加入游戏开发群欢乐搅基:869551769

有意向参与线下游戏开发学习的读者可戳这里进一步了解:http://www.levelpp.com/

搜索更多有关“元气骑士unity教程:用unity实现俯视角射击是一种怎样的体验”的信息 [百度搜索] [SoGou搜索] [头条搜索] [360搜索]
本网站部分内容、图文来自于网络,如有侵犯您的合法权益,请及时与我们联系,我们将第一时间安排核实及删除!
CopyRight © 2008-2024 蜗牛素材网 All Rights Reserved. 手机版