哈喽大家好我是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​pan.baidu.com

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

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

unity判断鼠标移动方向_【反向元气骑士】用unity实现俯视角射击是一种怎样的体验...相关推荐

  1. 【unity实战】制作类元气骑士、挺进地牢——俯视角射击游戏多种射击效果(一)(附源码)

    文章目录 本期目标 前言 欣赏 开始 1. 角色移动和场景搭建 2. 绑定枪械 2.1 首先将各种枪械的素材添加给人物作为子物体 2.2 给枪械也分别添加两个子物体用作标记枪口和弹仓位置 3. 枪械动 ...

  2. 【Unity实战】制作类元气骑士、挺进地牢——俯视角射击游戏多种射击效果(二)(附源码)

    文章目录 前言 一.火箭筒 1. 编写火箭筒脚本 2. 创建火箭弹和新爆炸特效的预制体 3. 编写火箭弹脚本 4. 设置好火箭弹和火箭筒的脚本和参数 5. 运行效果 二.激光枪 1. 编写激光枪脚本 ...

  3. unity fixedupdate_3D俯视角射击——用Unity还原东方弹幕(上)

    前言 之前我们的专栏中介绍过2D的俯视角射击,这次就来试试在3D场景下的实现.移动射击的实现方法差不多,所以本次的主要目标是在3D场景下还原东方的符卡(弹幕)效果. 我们先来看看最终结果: 可配置的弹 ...

  4. dotween unity 延时_3D俯视角射击——用Unity还原东方弹幕(上)

    作者:QXYO 前言 之前我们的专栏中介绍过2D的俯视角射击,这次就来试试在3D场景下的实现.移动射击的实现方法差不多,所以本次的主要目标是在3D场景下还原东方的符卡(弹幕)效果. 我们先来看看最终结 ...

  5. 【Unity俯视角射击】我们来做一个《元气骑士》的完整Demo1

    ---------------------------相关功能实现-------------------------------- 1.人物移动 人物的移动依旧是利用在Update中获取键盘输入的&q ...

  6. Unity 判断鼠标上下左右拖动

    Unity 判断鼠标上下左右拖动 public class Logic : MonoBehaviour {private float StartMouseLocationX;private float ...

  7. 元气骑士机器人修好后怎么用_《元气骑士》五大“难度”挑战,从手速到恶搞很嗨,还能解锁皮肤...

    元气不倒,伴你到老.hello大家好,我是可爱且魅力四射,迷人但不失风度的熊猫. 最近的有小伙伴们给熊猫私信说<元气骑士>地牢当中有一些挑战根本完不成,就是官方过来恶搞的. 小伙伴们给熊猫 ...

  8. pexpect.spawn timeout 无限_【元气骑士最新无限钻石版】元气骑士游戏无限钻石版下载...

    元气骑士无限钻石版下载如遇网络信号问题,可切换至WIFI网络或4G网络. 元气骑士最新版是一款画面精致的Q萌风格的射击游戏,维持世界平衡的魔法石被拥有高科技的外星生物夺走了,你能否夺回魔法石拯救这个世 ...

  9. 酷乐萌机器人_《元气骑士》机器人末日科技实验体皮肤获得方法

    元气骑士机器人末日科技实验体皮肤如何获取?小编这里带来了元气骑士机器人末日科技实验体皮肤获得方法,想要拥有这款皮肤的玩家们就一起来看看吧! 元气骑士机器人末日科技实验体皮肤获得方法 机器人的2周年皮肤 ...

最新文章

  1. iOS关于像素的适配
  2. STM32的IIC应用详解3
  3. Python字典dict的增删查改及常用操作
  4. centos proftp_在CentOS上禁用ProFTP
  5. C++ 学习之旅(7)——指针pointer
  6. 黑夜主权个人团队html源码 简单修改即可使用
  7. [深度学习-实践]人脸识别的例子-Tensorflow2.x Keras
  8. 如何在golang http服务端程序中读取2次Request Body?(转)
  9. 利用预渲染解决优化性能问题IOS
  10. for语句的执行过程_深入学习MySQL 01 一条查询语句的执行过程
  11. 罚函数(penalty function)的设计
  12. Know Difference between Oracle Reserved Words and Keywords
  13. 结构光三维扫描仪(单相机+单投影仪)
  14. 肇庆七星岩星湖 情迷湿地公园
  15. MySQL复制一张表数据到另一张新表
  16. 世界各国GDP排名(1960-2018)
  17. LeetCode 43. 字符串相乘【c++/java详细题解】
  18. linux oracle 常用操作
  19. 【恩墨有约成都站】Kamus和老熊与你相约,不止是技术
  20. majaro kde 搜狗五笔拼音 无法输入顿号

热门文章

  1. mysql 存储过程循环一张表的所有记录_MySQL数据库知识汇总
  2. distinct 排序_自己造一个排序算法
  3. android 北斗定位代码_大牛三步教你解决,BAT资深APP性能优化系列-卡顿定位问题,收藏哦
  4. Bridge 、 Adapter 和 Facade 的区别
  5. P4550 收集邮票-洛谷luogu
  6. leetcode 2 Add two numbers
  7. chrome console 调试xpath
  8. 一千行MySQL学习笔记(十二)
  9. Asp.Net MVC中的RenderPartial 和 RenderAction 【转】
  10. 用VS向SharePoint中部署添加List 并指定应用的Content Type