Unity2D实现游戏回旋镖

本文实例为大家分享了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)

按下按键生成即可

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Unity实现物体运动时画出轨迹

    本文实例为大家分享了Unity实现物体运动时画出轨迹的具体代码,供大家参考,具体内容如下 1.新建空物体,上赋LineRenderer 2.新建空物体,把轨迹画出来,设计和脚本. 3.LineMark的脚本是 using System.Collections; using System.Collections.Generic; using UnityEngine; public class LineMark : MonoBehaviour { private GameObject clone;

  • Unity实现汽车前后轮倒车轨迹计算

    汽车前后轮倒车轨迹计算附C#源码(Unity),供大家参考,具体内容如下 原理很简单, 都是高中的几何数学部分 需要的参数有: 车前后轴距; 车宽(左前轮与右前轮距离); 当前车轮角度(多数车33.5°); 是否要绘制前轮轨迹线; ///<summary> /// 获取行车轨迹预测index = 0 left轨迹 /// </summary> /// <param name="steeringAngle">方向盘角度</param> //

  • Unity2D实现游戏回旋镖

    本文实例为大家分享了Unity2D游戏回旋镖实现的具体代码,供大家参考,具体内容如下 以下我举出2种同使用情况的回旋镖 那么回旋镖需要怎么做呢? 任务清单如下 回旋镖会自我旋转 回旋镖达到一定距离会飞回来 回旋镖对敌人造成伤害 回旋镖会飞回玩家手里 带着这些任务我们来依次实现这两种情况的回旋镖吧 1.在2D平面游戏上的回旋镖 实现一个丢出回旋镖后,会缓慢减速,然后再直接收回手里,碰到怪马上返回的效果 先创建一个回旋镖实体,并在上面添加如下脚本 public float Speedrotate;

  • Unity3D开发教程:愤怒的小鸟

    一.前言 "愤怒的小鸟"在2009年12月发布,由于它的高度上瘾的游戏,它很快成为有史以来最成功的移动游戏. 在本教程中,我们将在"Unity"中实现"愤怒的小鸟"翻版.游戏中最复杂的部分是物理系统,但是多亏了Unity,我们就不用担心太多了. 像往常一样,一切都会尽可能简单地解释,这样每个人都能理解它. 以下是项目的预览: 二.源码 UI资源: https://wwr.lanzoui.com/iENnJop2n9i 密码:bnj2 源代码: h

  • 游戏开发Unity2D图片任意形状破碎裂片效果展示

    目录 一.前言 二.效果演示 三.Demo工程下载 四.操作步骤 1.牙图片:SrpiteRenderer 2.碎裂:Explodable 3.多边形碰撞体组件:PolygonCollider2D 4.生成碎片:Generate Fragments 5.点击碎裂:ExplodeOnClick 6.碎裂爆破:ExplosionForce 7.碎了再碎:ExplodableFragments 结束语 一.前言 点关注不迷路,持续输出Unity干货文章. 嗨,大家好,我是新发. 2014年的某一天,我

  • 游戏开发进阶Unity网格(Mesh\动态合批\骨骼动画\蒙皮)

    目录 一.前言 二.Hello Mesh 三.萌新初识Mesh 1.引擎内置的Mesh 2.Mesh是什么 三.Mesh的创建方式 1.第三方建模软件 2.Unity建模插件:ProBuilder 3.程序动态生成网格 四.Unity中如何显示网格 1.MeshFilter:网格过滤器 2.MeshRenderer:网格渲染器 3.SkinnedMeshRenderer:蒙皮网格渲染器 3.1 骨骼动画 3.2 SkinnedMeshRenderer组件 3.2 使用BakeMesh进行优化 五

  • php实现的中秋博饼游戏之掷骰子并输出结果功能详解

    本文实例讲述了php实现的中秋博饼游戏之掷骰子并输出结果功能.分享给大家供大家参考,具体如下: 前面讲述了php实现的中秋博饼游戏之绘制骰子图案功能,纯php实现,就要用php来生成图案,第一步就先绘制骰子图案.下面就是编码实现业务逻辑,具体代码如下: <?php class roll { private $_defRank = 'lk'; public function lottery() { $dice = $this->rollDice(); $format = $this->fo

  • php实现的中秋博饼游戏之绘制骰子图案功能示例

    本文实例讲述了php实现的中秋博饼游戏之绘制骰子图案功能.分享给大家供大家参考,具体如下: 最近公司中秋博饼(在厦门),自己没事也想玩玩,所以就想动手写了一个纯php实现的中秋博饼游戏,既然要纯php实现,就要用php来生成图案,所以第一步就先绘制骰子图案. 平时很少使用php绘图,不过查查资料还是绘制出来了,不多说了,代码如下: header('Content-Type:image/png'); $img = imagecreatetruecolor(200, 200); $white = i

  • python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)

    完整代码下载:http://xiazai.jb51.net/201407/tools/python-migong.rar 最近研究了下迷宫的生成算法,然后做了个简单的在线迷宫游戏.游戏地址和对应的开源项目地址可以通过上面的链接找到.开源项目中没有包含服务端的代码,因为服务端的代码实在太简单了.下面将简单的介绍下随机迷宫的生成算法.一旦理解后你会发现这个算法到底有多简单. 1.将迷宫地图分成多个房间,每个房间都有四面墙. 2.让"人"从地图任意一点A出发,开始在迷宫里游荡.从A房间的1/

  • 原生JavaScript编写canvas版的连连看游戏

    本文实例为大家分享了JavaScript编写canvas版的连连看游戏的具体实现代码,供大家参考,具体内容如下 效果图: 实现代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> #box{ /*border: 1px solid #D1D1D1; */ overflow: hidden; pos

  • JavaScript编写推箱子游戏

    推箱子游戏是老游戏了, 网上有各种各样的版本, 说下推箱子游戏的简单实现,以及我找到的一些参考视频和实例: 如下是效果图: 这个拖箱子游戏做了移动端的适配, 我使用了zepto的touch模块, 通过手指滑动屏幕就可以控制乌龟走不同的方向: 因为推箱子这个游戏比较简单, 直接用了过程式的方式写代码, 模块也就是两个View 和 Model, 剩下就是用户的事件Controller, 用户每一次按下键盘的方向键都会改变数据模型的数据,然后重新生成游戏的静态html, 然后用innerHTML方式插

  • PHP游戏编程25个脚本代码

    清单 1.简单的掷骰器 许多游戏和游戏系统都需要骰子.让我们先从简单的部分入手:掷一个六面骰子.实际上,滚动一个六面骰子就是从 1 到 6 之间选择一个随机数字.在 PHP 中,这十分简单:echo rand(1,6);. 在许多情况下,这基本上很简单.但是在处理机率游戏时,我们需要一些更好的实现.PHP 提供了更好的随机数字生成器:mt_rand().在不深入研究两者差别的情况下,可以认为 mt_rand 是一个更快.更好的随机数字生成器:echo mt_rand(1,6);.如果把该随机数字

随机推荐