【sunny land】利用Animation编辑器实现近战敌人判定

简介: 【sunny land】利用Animation编辑器实现近战敌人判定

昨晚研究了一晚Boss近战判定,也找了一些方法,但始终找不到合适的

今天终于让我找到了[泪目]

让我们先看演示62ada18cb9e844f0b96ceae1e71d312f.gif

这个效果是我们的Boss挥刀时不造成伤害,当火焰冒出来时再对主角造成伤害。

这个我讲详细点吧

步骤:

首先,我们创建两个空对象

8908982a5c664317bd76a884318afb9f.png

左伤害和右伤害,当主角在攻击范围内时进行攻击,

然后我们挂载伤害脚本和点碰撞体

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MeleeAttack : MonoBehaviour
{
    // Start is called before the first frame update
    public float hurt;
    void Start()
    {
    }
    // Update is called once per frame
    void Update()
    {
    }
    private void OnTriggerEnter2D(Collider2D other)
    {
        foxcontroller fox = other.gameObject.GetComponent<foxcontroller>();
        Rigidbody2D rb = other.gameObject.GetComponent<Rigidbody2D>();
        if (fox != null){
            Vector2 Force = new Vector2(transform.position.x - rb.position.x, 0);
            fox.ChangeHealth(-2);//近战攻击扣两滴血,要是难度太高再削
            rb.AddForce(-Force * hurt);//这里是击退效果,其实可以不加负号,我前面写反了这里图方便加了个负号
        }
    }
}


对主角造成伤害并击退

然后是动画控制



68610907373043de9a6270f1733753eb.png

目前是三个,但是我还在做,后面还有其他的状态

    public GameObject LeftAttack;
    public GameObject RightAttack;
    public float MeleeAttackRadial;
    private bool Attacking;
    public  bool canAttack = true;
    public float canAttackingTime = 4f;
    public float Timerr;
    void Start()
    {
        Timer = changeTime;
        animator = GetComponent<Animator>();
        Timerr = canAttackingTime;
    }
    // Update is called once per frame
    void Update()
    {
        Attack();
        runNormal();
        if (Timerr > 0)
        {
            Timerr -= Time.deltaTime;
            canAttack = false;
        }
        else canAttack = true;
    }
private void Attack()
    {
        if (fox.transform.position.x - transform.position.x > 9 || fox.transform.position.x - transform.position.x < -9)
        {
            LeftAttack.SetActive(false);
            RightAttack.SetActive(false);
        }
        if (!canAttack)
        {
            Attacking = false;
            animator.SetBool("Attacking", false);
            return;
        }
        if (fox.transform.position.x - transform.position.x < 9 && fox.transform.position.x - transform.position.x > 0&&direction == 1)
        {
            Timerr = canAttackingTime;
            Attacking = true;
            //RightAttack.SetActive(true);
            animator.SetFloat("look", fox.transform.position.x - transform.position.x);
            animator.SetBool("Attacking", true);
        }
        else if (fox.transform.position.x - transform.position.x > -9 && fox.transform.position.x - transform.position.x < 0&&direction == -1)
        {
            Timerr = canAttackingTime;
            Attacking = true;
            //LeftAttack.SetActive(true);
            animator.SetFloat("look", fox.transform.position.x - transform.position.x);
            animator.SetBool("Attacking", true);
        }
        else
        {
            Attacking = false;
            LeftAttack.SetActive(false);
            RightAttack.SetActive(false);
            animator.SetBool("Attacking", false);
        }
    }

攻击代码,当Boss攻击冷却好并且主角处于攻击范围内并面朝主角时,开始攻击主角,脚本里我只播放攻击动画,判定我在Animation工具里解决



83ce0ebf57214222ac7526977be56ec4.png


这里我点击Add Property,添加事件,在播放动画时,在冒火的帧上将前面我们设置的空对象设置成true,也就是leftAttack.SetActive(true);


这样我们就能够在特定的帧上面对主角进行伤害了,Boss控制脚本我们就播放动画,伤害在Animation里解决



目录
打赏
0
0
0
0
0
分享
相关文章
【C/C++ 基础算法】 C/C++ 位图算法的使用
【C/C++ 基础算法】 C/C++ 位图算法的使用
225 0
前端 ex2json 用于 vue/react/js 将 xls、xlsx、csv 文件转成 json 数组
前端 ex2json 用于 vue/react/js 将 xls、xlsx、csv 文件转成 json 数组
306 0
Neos的渗透测试靶机练习——DC-1
Neos的渗透测试靶机练习——DC-1
134 4
|
3月前
|
2025 年 3 个最佳 WordPress 托管平台推荐
2025年,WordPress托管平台的选择对网站成功至关重要。本文推荐三大优质平台:WebSoft9,以企业级安全和开源优化见长;Hostinger,高性价比且新手友好;Bluehost,官方认证稳定性强。根据用户需求,WebSoft9适合技术要求高的企业,Hostinger适配预算有限的个人,Bluehost则面向追求稳定的中小企业。综合评估网站规模、技术和预算,选择最适合的平台可显著提升效率与安全性。
154 1
DevOps实践:持续集成与持续部署的黄金路径
在数字化时代,快速迭代和高质量软件交付成为企业竞争的核心。本文深入探讨了DevOps文化下,持续集成(CI)与持续部署(CD)的最佳实践,旨在为读者提供一套实现高效、自动化的软件发布流程的方法论。通过分析现代软件开发的挑战,结合具体案例,本文详细阐述了如何构建一个灵活、高效的CI/CD流水线,以及如何利用监控和反馈机制不断优化这一过程。文章不仅适合运维人员阅读,同时也为软件开发者和项目经理提供了宝贵的参考。
重构U3D动画系统:运用Animator Controller层叠状态机优化游戏表现
【7月更文第11天】随着Unity 3D(简称U3D)游戏开发的不断深入,高效且流畅的动画系统成为了提升玩家体验的关键因素。本文将深入探讨如何通过重构U3D项目的动画系统,利用Animator Controller的层叠状态机(Layered State Machine)特性,显著提高动画的处理效率与游戏的流畅度。我们将通过一个实战示例,展示如何设置和优化状态机,进而实现角色动画的细腻控制与高效切换。
329 0
【阿里云云原生专栏】云原生环境下的微服务治理:阿里云 Dubbo 与 Nacos 的深度整合
【5月更文挑战第25天】阿里云Dubbo和Nacos提供微服务治理的强大工具,整合后实现灵活高效的治理。Dubbo是高性能RPC框架,Nacos则负责服务发现和配置管理。整合示例显示,通过Nacos注册中心,服务能便捷注册发现,动态管理配置。简化部署,提升适应性,但也需注意服务稳定性和策略规划。这种整合为云原生环境的微服务架构带来强大支持,未来应用前景广阔。
356 2
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问