元气骑士unity教程:用unity实现俯视角射击是一种怎样的体验
作者:Yumir
哈喽大家好我是yumir。
最近沉迷元气骑士,自从官方把各种“bug”修复之后,这个游戏对我这种手残玩家来说实在是太难了。既然打不过,那我就自己写一个,不就是俯视角射击吗,分分钟给你搞定,一百行代码都不要。
要说用unity实现俯视角射击是一种怎样的体验,就是太简单了,要加上元气骑士,就不简单了。所以这次只是实现角色控制和手枪射击,总之“俯视角”和“射击”都有啦,也是个俯视角射击游戏了嘛。
具体步骤如下:
- 实现角色移动。
- 使角色和枪看向目标点。
- 实现带准星的射击。
实现效果
实现角色移动首先要有角色,虽然用方块就可以,但是这样就会显得没有诚意,为了更加有诚意一点我用之前学到的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/
- 03-07端游亚索对线技巧教学,如何理解国人对亚索这个英雄的沉迷
- 03-10石家庄春天看油菜花 石家庄鹿泉常馨谷油菜花节启幕
- 01-30上联是山东山西山相连下联是什么?上联,广东广西有东西下联是
- 01-09黑暗系花的高清壁纸:超好看的太阳花和纯黑蝴蝶壁纸来了
- 01-26数据结构中所有的时间复杂度:数据结构时间复杂度题库
- 12-12牛肚怎么焖最好吃?教你烧牛肚的小窍门做出的牛肚鲜香不膻
- 03-27阜阳高铁站试运行:每8分钟开出一趟高铁的地级市
- 12-25婚纱摄影十大排行中牟,许昌与濮阳婚纱摄影照哪家拍的好
- 11-28打造全球品牌的三个阶段,就是给品牌商提供有价值的专业服务
- 04-21西瓜视频新手入门教程大全 西瓜视频操作小技巧
- 12-10庞龙是几线歌手 歌手庞龙直播唱歌被骂
- 01-04每个人都有自己难以释怀的故事:四个不那么开心的故事
- 11-23从上到下织女式钩针开衫教程,时尚百搭的女童钩针羊毛棉V领开衫
- 03-02有实用性的变废为宝:吐个槽,变废为宝的生活究竟美在哪里
- 04-19徒然喜欢你续作:徒然チルドレン完结恋爱群像
- 03-01古风精美小插画 图文:一组古风胖娃娃插画特别的可爱美丽
热门
推荐
- 1朋友的酒简谱_朋友的酒谱子李晓杰197
- 2波妞和宗介是什么意思353
- 3苦涩的香菇爱情496
- 4摩羯座男生跟巨蟹座女生般不般配157
- 5夏天值得喝的养生茶有哪些368
- 6大自然的灵魂雨作文800字441
- 7如何迎接正在走向深度的语文412
- 8团结的好段落104