当前位置: 首页 > news >正文

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);}}

相关文章:

  • LLM之LangChain(七)| 使用LangChain,LangSmith实现Prompt工程ToT
  • 树与二叉树---数据结构
  • bat脚本 创建计划任务 一分钟设置ntp同步周期为60s
  • Gin框架: 快速搭建起一个Web应用环境及处理不同类型的响应
  • wordpress外贸成品网站模板
  • 二叉树相关OJ题
  • Python编程中的异常处理
  • 利用Excel模拟投币试验
  • 简单试验:用Excel进行爬虫
  • 双活工作关于nacos注册中心的数据迁移
  • javaweb学习day03(JS+DOM)
  • python第六节:字典dict(2)
  • Pytorch卷积层原理和示例 nn.Conv1d卷积 nn.Conv2d卷积
  • 从零开始手写mmo游戏从框架到爆炸(十二)— 角色设定
  • 云计算基础-备份和容灾
  • IP路由与转发
  • JavaScript学习总结——原型
  • JWT究竟是什么呢?
  • yii2中session跨域名的问题
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 关于使用markdown的方法(引自CSDN教程)
  • 解析 Webpack中import、require、按需加载的执行过程
  • 源码安装memcached和php memcache扩展
  • 做一名精致的JavaScripter 01:JavaScript简介
  • Linux权限管理(week1_day5)--技术流ken
  • mysql面试题分组并合并列
  • scrapy中间件源码分析及常用中间件大全
  • 函数计算新功能-----支持C#函数
  • 如何在招聘中考核.NET架构师
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ${factoryList }后面有空格不影响
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (4) PIVOT 和 UPIVOT 的使用
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (小白学Java)Java简介和基本配置
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)为什么要选择C++
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (轉)JSON.stringify 语法实例讲解
  • .net core 连接数据库,通过数据库生成Modell
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET的数据绑定
  • .NET基础篇——反射的奥妙
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .net生成的类,跨工程调用显示注释
  • @Transactional 竟也能解决分布式事务?
  • @Transient注解
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [@Controller]4 详解@ModelAttribute
  • [20190416]完善shared latch测试脚本2.txt