Unity2D游戏实现回旋镖

以下我举出2种同使用情况的回旋镖

那么回旋镖需要怎么做呢?
任务清单如下
回旋镖会自我旋转
回旋镖达到一定距离会飞回来
回旋镖对敌人造成伤害
回旋镖会飞回玩家手里

带着这些任务我们来依次实现这两种情况的回旋镖吧

1在2D平面游戏上的回旋镖

实现一个丢出回旋镖后,会缓慢减速,然后再直接收回手里,碰到怪马上返回的效果
先创建一个回旋镖实体,并在上面添加如下脚本

    public float Speedrotate;public float AttackDamage;private Vector2 speedVelocity;private float Speedtemprotate;//中间变量记录最大旋转速度bool first = true;//此bool值代表是否是第一阶段:即丢出去的飞行阶段void Start(){speedVelocity = gameObject.GetComponent<Rigidbody2D>().velocity;Speedtemprotate = Speedrotate;}private void FixedUpdate(){transform.Rotate(0, 0, Speedrotate);//根据旋转速度来自转if(Speedrotate > 0 && first)//旋转速度和飞行随时间减小,直到为0就停止运动{gameObject.GetComponent<Rigidbody2D>().velocity -= speedVelocity * 0.02f;Speedrotate -= (Speedtemprotate * 0.02f);}else if(Speedrotate<0&&first)//第一阶段结束开始过渡第二阶段{speedVelocity = gameObject.GetComponent<Rigidbody2D>().velocity =      (GameObject.Find("Player").transform.position - transform.position).normalized;//获得新的速度(因为玩家可能会移动到任何位置,所以不能只是单纯往回飞)first = false;//第二阶段开始}else if(!first)//第二阶段回旋镖一直往玩家方向飞行{Speedrotate += (Speedtemprotate * 0.02f);//这个0.02f速度可以调快一点看个人喜爱float x = GameObject.Find("Player").transform.position.x;float y = GameObject.Find("Player").transform.position.y;Vector2 dir = new Vector2(x - transform.position.x, y - transform.position.y).normalized * Time.deltaTime;transform.Translate(dir * Time.fixedDeltaTime * 500,Space.World);}}private void OnTriggerEnter2D(Collider2D collision){if (collision.tag == "Enemy" && first){first = false;Speedrotate = 0;//强行结束first阶段other.GetComponent<Enemy>.TakeDamage(damage);//对敌人造成伤害}}

然后在玩家身上加上脚本,这里逻辑是根据鼠标位置发射回旋镖

private void Update()
{if (!isCanweapon) TimeweaponBack += Time.deltaTime;//获取回旋镖返回时间TimeweaponShoot += Time.deltaTime;//设置回旋镖冷却//发射回旋镖if(TimeweaponShoot>=AttackSpeed&&Input.GetAxis("Fire2")==1&&isCanweapon){TimeweaponBack = 0;isCanweapon = false;Vector3 worldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);//获取当前屏幕的点Vector3 dir = worldPos - transform.position;//获取玩家与屏幕的方向dir.z = 0;//2D游戏不需要z轴GameObject go = Instantiate(weapon, transform.position+dir.normalized*0.2f, transform.rotation);go.GetComponent<Rigidbody2D>().velocity = dir.normalized*4;//给回旋镖速度}
}private void OnTriggerEnter2D(Collider2D collision){//捡返回的回旋镖if(collision.tag=="weapon"&& TimeweaponBack > 0.03f){isCanweapon = true;TimeweaponShoot = 0;Destroy(collision.gameObject);}}

效果演示如下:

2.只在左右面上回旋镖(转运B站up秦无邪的)
实现一个回旋镖丢出然后飞回,中途不会被怪打断飞行,并且y轴跟随玩家
代码如下

void Start()
{rb2D=GetComponent<Rigidbody2D>();rb2D.velocity=transform.right*speed;//给回旋镖初始速度startSpeed=rb2D.velocity;//记录初始速度playerTransform=GameObject.FindGameObjectWithTag("Player").GetComponment<Transform>();//获得玩家位置void Update()
{transform.Rotate(0,0,rotateSpeed);//自我旋转float y=Mathf.Lerp(transform.position.y,playerTransform.position.y,0.1);//让回旋镖y轴和玩家在一起transform.position=new Vector3(transform.position.x,y,0.0f);rb2D.velocity-=startSpeed*Time.deltaTime;//使回旋镖慢慢减速,到达0之后速度方向为之前的反方向飞回来if(Mathf.Abs(transform.position.x-playerTransform.position.x)<0.5f){Destory(gameObject);//飞回玩家手里}
}}
void OnTriggerEnter2D(Collider2D other)
{if(other.gameObject.CompareTag("Enemy"));{other.GetComponent<Enemy>.TakeDamage(damage);//对敌人造成伤害   }
}

最后新健一个发射器绑在玩家的前面(注意是前面,如果在玩家身体上可能会一释放就会被Destory)

按下按键生成即可

Unity2D游戏回旋镖实现相关推荐

  1. Unity2D游戏开发和C#编程大师班

    本课程采用现代游戏开发的最新内容和最新技术(Unity 2D 2022) 学习任何东西的最好方法是以一种真正有趣的方式去做,这就是这门课程的来源.如果你想了解你看到的这些不可思议的游戏是如何制作的,没 ...

  2. Unity2D游戏开发基础教程1.2项目、资源和场景

    Unity2D游戏开发基础教程1.2项目.资源和场景 如果使用Unity制作游戏,就一定会接触到项目(Project.资源(Asset)和场景(Scene).本节将依次介绍它们. 1.2.1  项目 ...

  3. Unity2D游戏开发基础教程1.2 项目、资源和场景

    Unity2D游戏开发基础教程1.2 项目.资源和场景 如果使用Unity制作游戏,就一定会接触到项目(Project.资源(Asset)和场景(Scene).本节将依次介绍它们. 1.2.1  项目 ...

  4. unity2d游戏开发系列教程:一、环境安装

    从这篇文章开始,一步一步教大家从0开始通过2DGameKit项目进行2D游戏开发 第一步.环境安装 1.先使用手机下载Unity Connect并注册登陆 2.进入unity官网https://uni ...

  5. unity2d游戏开发系列教程:四、一个2D游戏所需要的主要功能(游戏框架)

    目录 unity2d游戏开发系列教程:一.环境安装 unity2d游戏开发系列教程:二.新建工程并熟悉Unity编辑器常用功能 unity2d游戏开发系列教程:三.场景布置,增加怪物和机关 原文下载 ...

  6. unity2d游戏开发系列教程:三、场景布置,增加怪物和机关

    目录 unity2d游戏开发系列教程:一.环境安装 unity2d游戏开发系列教程:二.新建工程并熟悉Unity编辑器常用功能 第一节.场景草地布置 先查看一下资源文件里都有什么,一会就要用到的 打开 ...

  7. Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

    Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 [文末源码] 前言 一,效果展示 二,场景搭建 三,代码逻辑 四,完善场景 五,使用小结 前言 还在看别人的寻路逻辑?保姆级教程,一步步教 ...

  8. unity2d游戏开发系列教程:二、新建工程并熟悉Unity编辑器常用功能

    目录 unity2d游戏开发系列教程:一.环境安装 第一步.打开项目 耐心等待一小会 工程界面 第二步.创建第一个场景(第一关)进行试玩 点击图中标号1的运行按钮,即可简单试玩感受,操作如下 移动A, ...

  9. Unity-2D游戏-打击感与敌人AI

    前言 最近快搞毕设了,学一些Unity2D游戏开发的知识,发现b站宝藏up主奥飒姆Awesome的两个蛮不错的教程,我想简单记录一下它这个游戏设计的方法. 我不一点点实现了,就是分析一下大致框架(方便 ...

最新文章

  1. 无法为新的Android ActionBar支持找到Theme.AppCompat.Light
  2. ASP.NET环境下配置FCKEditor并上传图片及其它文件
  3. 21.3.3 原子性与易变性 21.3.4 原子类
  4. 沫沫金Echarts移动端demo
  5. rabbitmq 同步策略_RabbitMQ高可用方案总结
  6. BetterZip结合自动操作工具和预设设置创建电影解压程序
  7. 1.7编程基础之字符串 06 合法 C 标识符 python
  8. appium 如何调用 adb_带你了解可用于Android APP自动化测试的框架:Appium
  9. IME输入法编程心得
  10. 无处不在的黄金分割比
  11. (转)中国大学改名大全2007最新版(笑掉大牙)
  12. C#学习笔记25: 控制台应用程序开发精讲
  13. 一篇文章详细解读Spring的AOP原理过程(Spring面向切面详解)
  14. 【科普贴】MDIO接口详解
  15. 计算机女生考研建议,计算机专业女生考研,建议选取的部分方向
  16. NI ELVIS III模拟电子电路课程实验解决方案
  17. 微信转账测试点梳理框架
  18. 【手册】如何编译/修改三星手机Rom(一)
  19. Jquery实现幻灯片轮播
  20. 计科考研里的【计算机系统结构、计算机软件与理论、计算机应用技术】都是什么意思?...

热门文章

  1. 仿天猫淘宝的ShopNC好商城原生Android 客户端源码项目
  2. 国办发布09年放假安排 国庆中秋合并连休八天
  3. 尚硅谷大数据hadoop教程_mapReduce
  4. Phython新手做网页操作自动化
  5. iic总线驱动(适配器驱动)详解
  6. PPT分享第01季-226套多种风格模板
  7. SDN(五) Netgear R6220从刷机到配置 OpenvSwitch交换机
  8. Second Language Acquire 英语探索前期
  9. Google Chrome在Windows7安装离线版
  10. 低噪声放大器核心电路设计