Unity中玩家的攻击(发射子弹,挥剑)

这篇具有很好参考价值的文章主要介绍了Unity中玩家的攻击(发射子弹,挥剑)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目前来说,我就知道玩家两种攻击方式,1.发射(子弹,弓箭),2.挥剑

1.发射子弹

想要玩家发射子弹,需要制作两个部分(玩家发射动画除外),第一个部分就是控制玩家的脚本,第二部分则是子弹部分,子弹部分需要将子弹做成预制件的形式。

制作思路:1.首先先把子弹的预制件做好,包括它的刚体和碰撞体,子弹脚本等Unity中玩家的攻击(发射子弹,挥剑)

 2.编写子弹的脚本,在子弹的脚本中,获取刚体组件时一定要在awake中获取,原因去看awake和start的区别,子弹脚本中的发射函数是用刚体中的AddForce方法,还有当子弹碰撞到物体销毁时是用的  Destroy(gameObject)方法Unity中玩家的攻击(发射子弹,挥剑)

 3.制作好子弹预制件后,在玩家脚本中写一个用一个public的GameObject游戏对象来获取到子弹预制件

Unity中玩家的攻击(发射子弹,挥剑)

 Unity中玩家的攻击(发射子弹,挥剑)

4.编写一个攻击函数,在攻击函数1.用Instantiate实例化一个 子弹的预制件,2.获取当前实例化子弹对象的子弹脚本,3.用获取到的子弹对象调用发射函数完成发射,附上部分代码段

玩家关于发射子弹的脚本

 public GameObject arrowProfabe;//弓箭
 void Update()
    {
        JudgeAttack();//其他无关代码已省略
    }
 void JudgeAttack()
    {
        if(Input.GetKeyDown(KeyCode.J))
        {
            animator.SetBool("IsAttack", true);
            PlayerAttack();
        }
        if(Input.GetKeyUp(KeyCode.J))
        {
            animator.SetBool("IsAttack", false);
        }
    }
 void PlayerAttack()
    {
        //实例化子弹预制件
        GameObject arrow = Instantiate(arrowProfabe, M_Rigidbody2D.position, Quaternion.identity);
        //通过实例化的对象获取子弹脚本,方便调用发射函数
        ArrowScript arrowScript = arrow.GetComponent<ArrowScript>();
        Vector2 flyDirection;
        if (transform.localRotation.y==0)
        {
            flyDirection = new Vector2(1, 0);
            arrowScript.Lunch(flyDirection, 400);
        }
        else if (transform.localRotation.y==-1|| transform.localRotation.y == 1)
        {
            flyDirection = new Vector2(-1, 0);
            arrow.transform.localRotation = Quaternion.Euler(0, -180, 0);
            arrowScript.Lunch(flyDirection, 400);
        }
    }

子弹脚本:

 public class ArrowScript : MonoBehaviour
    {
    Rigidbody2D rigidbody2D1;
    void Awake()//这里初始化必需要用Awake!!!!因为在Player中要实例化它,如果用start会出现未实例化的错误
    {
        rigidbody2D1 = GetComponent<Rigidbody2D>();        
    }

    void Update()
    {
        DestoryItself();
    }
    public void Lunch(Vector2 direction, float force)
    {
        //这是发射函数
        rigidbody2D1.AddForce(direction * force);
    }
    void DestoryItself()
    {
        if(gameObject.transform.position.magnitude>100)
        {
            Destroy(gameObject);
        }
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        GameObject enemy = collision.gameObject;        
        MonsterControll monster = enemy.GetComponent<MonsterControll>();
        //这里是判断子弹是否击中敌人
        if(collision.gameObject.tag=="Enemy")
        {
            Destroy(gameObject);
            monster.Hurt();
        }
    }
}

注意:这里发射子弹出去,因为存在除敌人外还有许多碰撞体,比如玩家自身,各种障碍物等,因此想要子弹只能碰撞到敌人时就有两种处理方式

第一:通过标签的方式区分,将敌人设置为敌人标签Unity中玩家的攻击(发射子弹,挥剑),随后在触发函数中(OnTriggerEnter2D)(注意子弹要为触发器才可以使用这个触发函数)判断碰撞器碰到的对象的标签是否为敌人

  if(collision.gameObject.tag=="Enemy")//代码部分
        {
            Destroy(gameObject);
            monster.Hurt();
        }

第二: 通过设置区分不同的图层然后再在项目设置->2D物理当中勾选取消能够碰撞的图层,把子弹和玩家等不需要子弹碰撞到的图层取消即可

Unity中玩家的攻击(发射子弹,挥剑)

Unity中玩家的攻击(发射子弹,挥剑)

 2.挥剑

想要玩家挥剑攻击,需要先知道挥剑的原理是在攻击者前面添加一个碰撞器,平时这个碰撞器是失效的,在攻击者攻击时这个碰撞器就会有效,攻击完成后又失效

制作思路:1.在制作好玩家的挥剑动画后,一帧一帧的播放,找到玩家🗡挥出去时最远的距离,然后在为挥剑者添加一个空的子物体Unity中玩家的攻击(发射子弹,挥剑),然后在这个空的子物体上添加一个多边形碰撞器Unity中玩家的攻击(发射子弹,挥剑)(注意碰撞器这里平时的状态为失效,而且是为触发器),就像这样Unity中玩家的攻击(发射子弹,挥剑)

2.制作完成攻击的触发器后,就需要怎么才能让这个碰撞体攻击时有效,攻击完后又失效,这里有两种方法

(1)较为简单的一种:在攻击者攻击的动画中,需要找三帧动画,第一帧,最后一帧和攻击最远那帧,在第一帧和最后一帧添加属性,把多边形碰撞器设置为失效,在攻击最远那帧碰撞器设置为有效,这样在攻击者攻击时就会达到攻击时碰撞器有效,攻击完后碰撞器失效 

Unity中玩家的攻击(发射子弹,挥剑)

 (2)利用协程函数进行调用:需要三个函数,一个攻击函数,两个协程函数;攻击函数就是攻击者攻击的函数,两个协程函数(第一个是让碰撞器有效,第二个是让碰撞器失效),这里解释一下为什么要用协程函数,因为玩家在攻击时是需要在攻击到最远处才让碰撞器生效,所以在要等玩家攻击动作做出来到最远处才生效(效果参照方法1)所以用到了第一个协程,至于第二个协程目的就是让碰撞器生效的时间再持续一小会儿再失效(方法1是立刻失效,也可以设置过一小会儿再失效)

Unity中玩家的攻击(发射子弹,挥剑)

 Unity中玩家的攻击(发射子弹,挥剑)文章来源地址https://www.toymoban.com/news/detail-408198.html

到了这里,关于Unity中玩家的攻击(发射子弹,挥剑)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity2D子弹朝向鼠标位置发射

    废话不多说,先说明一下我使用的变量 float attack_time 用于表示每次攻击的间隙时间 float current_time 攻击时间的冷却 Rigidbody2D body 2D刚体组件 Object bomb 需要发射的物体对象 创建一枚子弹,unity的Instantiate()函数就可以实现,这里需要的三个参数是物体对象(Object),生成位置(Vecto

    2024年02月10日
    浏览(40)
  • Unity制作射击游戏案例01(控制角色+发射子弹+摄像机跟踪)

    //【业务逻辑】这个脚本用来1.控制物体移动旋转(WASD)、   2.发射子弹(空格键) //【程序逻辑2】 首先检测用户没有按下空格键 2.如果按下呢执行发射子弹函数    3.克隆子弹 4.让克隆的子弹往前跑 为子弹模板添加刚体,并且限制旋转 这个脚本需要挂在到摄像机,里面谈

    2024年02月06日
    浏览(42)
  • Unity使用新输入系统InputSystem制作飞机大战Demo(后处理配置、子弹的发射……)

    @作者 : SYFStrive @博客首页 : HomePage 📌: 个人社区(欢迎大佬们加入) 👉: 社区链接🔗 📌: 觉得文章不错可以点点关注 👉: 专栏连接🔗 💃: 程序员每天坚持锻炼💪 👉 飞机大战专栏 (🔥) 单例模式是1种设计模式:👉(Design pattern)代表了最佳的实践,通常被有经

    2024年01月22日
    浏览(34)
  • JavaScript实现飞机发射子弹详解(内含源码)

    文本主要讲解如何利用JavaScript实现飞机发射子弹,实现过程以及源码讲解。实现效果图如下: 首先,找到飞机和子弹的UI图,gif图最好,这里我用的是jpg图。 飞机: 子弹: 2.把这两个UI图放在代码文件夹中 3.创建初始子弹数和飞机的img,这里我创建的是十个子弹和一架飞机

    2024年02月04日
    浏览(27)
  • 【C++】做一个飞机空战小游戏(九)——发射子弹的编程技巧

     [导读]本系列博文内容链接如下: 【C++】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C++】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动 【C++】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C++】做一个飞

    2024年02月11日
    浏览(33)
  • unity实现弹射子弹

    unity实现弹射子弹,子弹在不同敌人之间来回弹射,发射自动选择最近的敌人,然后每次随机选择附近的敌人进行弹射,可以控制弹射次数,比如3次后子弹销毁 可以通过以下步骤在Unity中实现弹射子弹的效果: 1.创建一个子弹对象和敌人对象,并在子弹对象上添加一个控制脚

    2024年02月10日
    浏览(82)
  • unity实现子弹散射效果和闪电链效果

    实现爆炸散射效果可以按照以下步骤进行: 1.准备子弹模型和爆炸特效模型,可以使用粒子特效或者模型。 2.创建子弹和敌人模型,同时添加刚体组件。 3.创建子弹的脚本,绑定到子弹上。 4.在脚本中,对子弹的 OnTriggerEnter 或 OnCollisionEnter 函数做出响应,检测敌人碰撞事件发

    2024年02月16日
    浏览(27)
  • 【Unity】超简单特效 - 子弹拖尾效果

    前言: 游戏中往往少不了 “子弹 ”,子弹常常需要带着小尾巴,今天我们就来了解并简单在Unity中实现子弹拖尾效果。 初步实现: 第一步我们还是新建一个场景,这里我们选择2D与黑底摄像机方便观察。 然后创建一个空对象作为子弹的父级,再新建2个子对象作为子弹本体

    2023年04月08日
    浏览(23)
  • 13. unity粒子特效--发射模块、各种发射器形状、粒子渐变(颜色/大小)

    1. 发射模块(Emission) 匀速发射 : Rate over Time :每秒钟发射的粒子数 Rate over Distance :每移动一米发射的粒子个数 两者可指定其一:若仅指定 Rate over Time ,则粒子根据时间的变化进行发射,若仅指定 Rate over Distance ,则粒子系统每词移动时才发射,不移动不发射 爆发式发射

    2024年02月15日
    浏览(37)
  • Unity2D实现子弹追踪目标

    实现子弹追踪目标有很多种方法,首先是一开始就选定了目标的位置,然后按照曲线运动轨迹的方式,持续运动到目标点,不过如果目标移动了,就得将对应的轨迹重新计算一次,另外如果需要设置范围的话更不好做。另一种是锐角追踪,就是在目标进入识别范围后,将子弹

    2024年02月06日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包