首页 > 其他分享 >Unity中实现简单的弹反小游戏

Unity中实现简单的弹反小游戏

时间:2023-12-10 22:15:09浏览次数:29  
标签:弹反 按下 enemyAttack 玩家 Unity 小游戏 简单 true animator

最近开发了一个小游戏,在其中实现了简单的弹反效果。

在敌人的剑上绑定一个box collider,同时勾选 is Trigger :

image

保证玩家有一个胶囊碰撞体。

1、敌人代码

随后我在控制敌人的代码(enemy.cs)中加入下面的函数控制弹反:

    //进入剑触发器
    void OnTriggerEnter(Collider collider)
    {
        if(collider.tag == "character" && isAttack == true)
        {
            //Character是玩家类,character是玩家对象,这里调用玩家类中的enemyAttack函数
            if(character.GetComponent<Character>().enemyAttack())
            {
                //弹反
                //下面代码仅测试用
                animator.SetTrigger("AttackFalse");
            }
        }
    }

OnTriggerEnter 在两个 Trigger 碰撞时会被调用。

首先判断碰撞到的 tag 是否是玩家角色,当前敌人是否是正在攻击的状态。
如果敌人当前正在攻击,isAttack变量会为true。

如果满足上面两个条件,说明当前敌人处于攻击状态,且敌人的剑已经碰到了玩家。

这时调用玩家类中的函数enemyAttack()。这个函数会返回bool,返回true表示弹反成功,false表示弹反失败。

如果弹反成功,就播放敌人被弹反的动画。

2、玩家代码

在玩家上挂载的代码中编辑函数enemyAttack():

    //返回true表示弹反成功,返回false表示弹反失败,该扣血了
    public bool enemyAttack()
    {
        if(defendTime < 0.3f && isDefend == true)
        {
            //按下时间合适
            audioSource.clip = defendAudio;
            audioSource.Play();
            return true;
        }
        //按下时间不合适,受伤
        animator.SetBool("Damage", true);
        blood -= 0.03f;
        slider.value = blood;
        return false;
    }

这个函数返回是否弹反成功。

弹反成功需要有下面的条件:

  • 当前玩家正在按下防御按键
  • 按下防御按键的时间小于一定长度

如果按下时间合适,就弹反成功,播放音频;如果按下时间不合适,则播放受伤动画,扣血、更改界面的UI。

函数Defend会被每帧调用,记录当前是否处于防御状态,以及按下防御按键的时长:

//每帧调用    
private void Defend()
    {
        //按下右键,且当前没有处于受伤状态,可以防御
        if (Input.GetMouseButton(1) && !animator.GetBool("Damage"))
        {
            //按下右键
            isDefend = true;
            defendTime += Time.deltaTime;
            animator.SetTrigger("Defend");
        }
        else
        {
            isDefend = false;
            defendTime = 0;
            animator.SetTrigger("DefendEnd");
        }
    }

3、动画控制器

我设计的主角的动画控制器如下:

image

敌人的动画控制器如下:

image

4、实现效果

image

标签:弹反,按下,enemyAttack,玩家,Unity,小游戏,简单,true,animator
From: https://www.cnblogs.com/Wu-765279087/p/17893324.html

相关文章

  • mybatis执行时原理的简单分析
    前置知识:mybatis中配置文件的解析自定义实现类的方式动态代理生成代理类的方式mybatis中配置文件的解析解析xml文件的技术有很多,我们不需要全部去掌握,但是我们要知道我们的xml文件通过解析可以得到什么可以发现通过我们解析得到的这2个信息就可以实现我们jdbc的操作了。我......
  • 通过宿主机查看K8S或者是容器内的Java程序的简单方法
    通过宿主机查看K8S或者是容器内的Java程序的简单方法背景最近一个项目的环境出现了cannotcreatenativeprocess的错误提示出现这个错误提示时,dockerexec或者是kubeexec进入容器/POD内部后,无法使用jstack等的命令.然后想简单查看一下问题原因都无从下手.这次......
  • C# 使用AES实现简单的加解密
    加密://使用SHA-256哈希函数处理秘钥varhashedKey=GetSHA256Hash(publicKey);//加密varencryptString=EncryptStringToBytes_Aes(strs,hashedKey);staticstringGetSHA256Hash(stringinput){using(SHA256sha256=SHA256.Create()){byte......
  • 使用Vue和Element UI进行文件上传的简单教程
    当使用Vue和ElementUI进行文件上传时,你可以按照以下步骤进行操作:步骤1:安装Vue和ElementUI在你的Vue项目中使用npm或者yarn安装Vue和ElementUI:npminstallvueelement-ui步骤2:创建上传组件创建一个Vue组件来处理文件上传的逻辑。在组件的<template>中添加一个文件上传的按钮和......
  • MFC CListVtrl 控件简单测试
    ▲样式Demo关联控件变量m_CList,在属性中将视图(View)设置成Report(报表)模式。在BOOLCMFCApplication4LlisBoxDlg::OnInitDialog()初始化函数中添加测试代码://TODO:在此添加额外的初始化代码//m_CList.SetView(1);//视图View要改成Report报表模式//设置风格样......
  • Unity 锚点 anchor
    1锚点(anchor)是什么?图中被红色方块圈起来的就是锚点,用于描述子物体在父物体的位置。锚点默认是聚在一起,也可以将锚点分开。2锚点的位置设置3锚点控制子物体位置的原理锚点可以组成矩形、一个点和一条线(两个点组成线的两端)3.1锚点位置调整MinXY和MaxXY以父物体......
  • 简单了解java中的io流中的字节流
    了解一下前置知识字符集,我们常见的字符集有ASCII,GBK,UTF-8GBK中一个字需要两个字节存储UTF-8中一个字母需要一个字节,并以0开头,一个汉字需要三个字节,与GBK不同的是,他支持的是世界文字,是一种相当通用的字符集IDEA中的字符集在右下角可以看到,默认是utf-8,在java中进行编码和解码......
  • 实现一个简单的外卖系统
    在这个技术飞速发展的时代,外卖系统已经成为人们生活中的一部分。通过一些简单的技术代码,我们可以搭建一个基本的外卖系统,让用户方便地选择、下单和支付。本文将使用Python和Flask框架为基础,演示一个简单的外卖系统的实现。步骤一:安装依赖首先,确保你已经安装了Python和Flask。如果没......
  • .net实现后台服务就这么简单,只要实现IHostedService接口就行了
     IHostedService 接口在.NETCore中的主要用途是定义应用程序生命周期内运行的后台服务。这些服务可以执行初始化、长时间运行的任务、定期运行的任务等。通过实例,我们可以演示如何使用 IHostedService 来实现一个简单的网络检测服务,并记录日志。首先,我们需要创建一个实现......
  • 简单封装PhpSpreadsheet,实现PHP快速导入、导出xlsx
    简单封装PhpSpreadsheet,实现PHP快速导入、导出xlsx<?phpnamespacexfstu\tools;usePhpOffice\PhpSpreadsheet\Spreadsheet;usePhpOffice\PhpSpreadsheet\Writer\Xlsx;usePhpOffice\PhpSpreadsheet\IOFactory;/***@methodexport(array$field,array$data)简单封......