Unity类银河恶魔城学习记录7-6 P72 Bouncy sword源代码

 Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考
此代码仅为较上一P有所改变的代码
【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili

Sword_Skill_Controller.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Sword_Skill_Controller : MonoBehaviour
{[SerializeField] private float returnSpeed = 12;private bool isReturning;private Animator anim;private Rigidbody2D rb;private CircleCollider2D cd;private Player player;private bool canRotate = true;public float bounceSpeed;//设置弹跳速度public bool isBouncing = true;//判断是否可以弹跳public int amountOfBounce = 4;//弹跳的次数public List<Transform> enemyTargets;//保存所有在剑范围内的敌人的列表private int targetIndex;//设置targetIndex作为敌人计数器private void Awake(){anim = GetComponentInChildren<Animator>();rb = GetComponent<Rigidbody2D>();cd = GetComponent<CircleCollider2D>();}public void ReturnSword(){rb.constraints = RigidbodyConstraints2D.FreezeAll;//修复剑只要不触碰到物体就无法收回的bug//rb.isKinematic = false;transform.parent = null;isReturning = true;}public void SetupSword(Vector2 _dir,float _gravityScale,Player _player){player = _player;rb.velocity = _dir;rb.gravityScale = _gravityScale;anim.SetBool("Rotation", true);}private void Update(){if(canRotate)transform.right = rb.velocity;//使武器随着速度而改变朝向if (isReturning){transform.position = Vector2.MoveTowards(transform.position, player.transform.position, returnSpeed * Time.deltaTime);//从原来的位置返回到player的位置//并且随着时间增加而增加速度if(Vector2.Distance(transform.position,player.transform.position)<1)//当剑与player的距离小于一定距离,清除剑{player.CatchTheSword();}}                if(isBouncing && enemyTargets.Count > 0){transform.position = Vector2.MoveTowards(transform.position, enemyTargets[targetIndex].position,bounceSpeed*Time.deltaTime);//3.当可以弹跳且列表内数量大于0,调用ToWords,这将使剑能够跳到敌人身上if (Vector2.Distance(transform.position, enemyTargets[targetIndex].position)<.1f){targetIndex++;amountOfBounce--;//设置弹跳次数if (amountOfBounce <= 0){isBouncing = false;isReturning = true;}//这样会使当弹跳次数为0时,返回到角色手中if (targetIndex >= enemyTargets.Count){targetIndex = 0;}}//利用与目标距离的判断,使剑接近目标距离时切换到下一个目标。//且如果所有目标都跳完了,切回第一个}}private void OnTriggerEnter2D(Collider2D collision)//传入碰到的物体的碰撞器{if (isReturning){return;}//修复在返回时扔出时没有碰到任何物体,但返回时碰到了物体导致剑的一些性质发生改变的问题,及回来的时候调用了OnTriggerEnter2Dif (collision.GetComponent<Enemy>() != null)//首先得碰到敌人,只有碰到敌人才会跳{if (isBouncing && enemyTargets.Count <= 0){Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, 10);foreach (var hit in colliders){if (hit.GetComponent<Enemy>() != null){enemyTargets.Add(hit.transform);}}}}StuckInto(collision);}//打开IsTrigger时才可使用该函数//https://docs.unity3d.com/cn/current/ScriptReference/Collider2D.OnTriggerEnter2D.htmlprivate void StuckInto(Collider2D collision){canRotate = false;cd.enabled = false;//相当于关闭碰撞后触发函数。//https://docs.unity3d.com/cn/current/ScriptReference/Collision2D-enabled.htmlrb.isKinematic = true;//开启物理学反应 https://docs.unity3d.com/cn/current/ScriptReference/Rigidbody2D-isKinematic.htmlrb.constraints = RigidbodyConstraints2D.FreezeAll;//冻结所有移动if (isBouncing&&enemyTargets.Count>0)//修复剑卡不到墙上的bugreturn;//终止对动画的改变和终止附在敌人上transform.parent = collision.transform;//设置sword的父组件为碰撞到的物体anim.SetBool("Rotation", false);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/474664.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[AIGC] 利用 chatgpt 深入理解 Java 虚拟机(JVM)

Java 虚拟机&#xff08;JVM&#xff09;是 Java 编程语言的核心运行环境&#xff0c;它负责解释和执行 Java 字节码。它是 Java 程序能够跨平台运行的关键&#xff0c;因为不同的操作系统和硬件平台都有自己的指令集和体系结构&#xff0c;而 JVM 则提供了一个统一的运行环境&…

梵宁教育:虚假宣传不实控诉,真相公布于众

近期&#xff0c;网络上出现了一些关于梵宁教育虚假宣传的言论&#xff0c;给梵宁教育及广大消费者带来了困扰和误解。作为负责任的教育机构&#xff0c;梵宁教育有必要站出来澄清这些不实言论&#xff0c;还原事实真相。 一、梵宁教育的基本情况 梵宁教育是一家致力于为学生…

多线程---创建线程

1.概述 多线程是指从软件或者硬件上实现多个线程并发执行的技术。线程是程序中独立运行的程序片段&#xff0c;每个线程都有独立的执行流程&#xff0c;可以在同一时间内执行不同的任务。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程&#xff0c;进而提…

接口和抽象类的区别

不同点&#xff1a; 1、接口只能定义抽象方法不能实现方法&#xff0c;抽象类既可以定义抽象方法&#xff0c;也可以实现方法。 2、单继承&#xff0c;多实现。接口可以实现多个&#xff0c;只能继承一个抽象类。 3、接口强调的是功能&#xff0c;具有什么能力。抽象类强调的是…

怎样让MCU/SFU视频会议ovmedia 接入GB28281监控视频参会互动

在国内视频应用对GB监控接入是常规操作&#xff0c;很多系统需要接入监控视频交互处理。我们以ovmedia视频会议为例做一个接入互动。 GB28181协议在流媒体系统较为普及&#xff0c;我们以开源SRS系统对接监控端再接入会议&#xff08;也可以用商用GB流平台&#xff0c;操作基本…

idea突然出现错误: “找不到或无法加载主类 @C:\Users\happ“解决方案

在公司敲代码时&#xff0c;编译器突然出现了以下报错&#xff0c;之前一直能正常运行 可以使用以下方法解决 找到启动类相关配置 找到Shorten command line,选择如下配置即可 进行到这里项目就能正常运行了&#xff0c;仅以此贴记录问题解决方案

java小知识

1、/META-INF/MANIFEST.MF /META-INF/MANIFEST.MF决定了jar的主类 在maven打包时&#xff0c;会自动生成这个文件 2、String不可变怎么理解 在String类的内部&#xff0c;存储字符变量的是一个char数组 这个value由private final修饰&#xff0c;且不提供修改的方法&#…

vue打包优化,webpack的8大配置方案

vue-cli 生成的项目通常集成Webpack &#xff0c;在打包的时候&#xff0c;需要webpack来做一些事情。这里我们希望它可以压缩代码体积&#xff0c;提高运行效率。 文章目录 &#xff08;1&#xff09;代码压缩&#xff1a;&#xff08;2&#xff09;图片压缩&#xff1a;&…

【复现】某公司指挥调度管理平台 RCE漏洞_51

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 该平台提供强大的指挥调度功能&#xff0c;可以实时监控和管理通信网络设备、维护人员和工作任务等。用户可以通过该平台发送指令…

H5 个人引导页带赞助版源码

H5 个人引导页带赞助版源码 源码介绍&#xff1a;一款带有4个选项的H5自适应引导页&#xff0c;右侧有QQ和微信联系按钮。带有三个赞助按钮。 下载地址&#xff1a; https://www.changyouzuhao.cn/9883.html

VNCTF 2024 Web方向 WP

Checkin 题目描述&#xff1a;Welcome to VNCTF 2024~ long time no see. 开题&#xff0c;是前端小游戏 源码里面发现一个16进制编码字符串 解码后是flag CutePath 题目描述&#xff1a;源自一次现实渗透 开题 当前页面没啥好看的&#xff0c;先爆破密码登录试试。爆破无果…

Acwing二分和前缀和(二)

机器人跳跃问题 原题链接&#xff1a;https://www.acwing.com/activity/content/problem/content/1570/ 二分查找更新条件只有两种&#xff1a; Rmid;else Lmid1&#xff1a;mid(LR)/2Lmid;else R mid-1&#xff1a;mid(LR1)/2 这两种更新条件的结果是一样的。 #include<…