学习游戏制作记录(克隆技能)7.25

1.实现冲刺后在原角色位置留下克隆体的功能

我们需要在玩家进入冲刺状态时创建一个对象,这可以使用预制体来实现

首先创建一个玩家的预制体,并给它装载动画控制器,拖入待机和攻击动画,最后把整个拖入你的预制体文件夹。

修改Player脚本:

public SkillManage skill { get; private set; }

skill = SkillManage.instance;//简化代码,后面只需要写skill.即可

创建Clone_Skill_Control脚本:

private SpriteRenderer sr;

**[SerializeField] private float CloneTimer;//克隆计时器

SerializeField\] private float colorloosingSpeed;//克隆体消失的速度** **private void Awake() { sr = GetComponent\(); }** **private void Update() { CloneTimer -= Time.deltaTime;** **if(CloneTimer \< 0 ) { sr.color=new Color(1,1,1,sr.color.a-Time.deltaTime\*colorloosingSpeed);//更改透明度 }** **if(sr.color.a\<=0 ) { Destroy(gameObject);//透明度消失则删除克隆体 } }** **public void SetupClone(Transform newtransform,float clonduration) { transform.position = newtransform.position;//更改克隆体的位置,确保在玩家的位置 CloneTimer = clonduration; }** ### 创建Clone_Skill脚本并在SkillManage脚本中初始化: **\[Header("Clone info")

SerializeField\] private GameObject ClonePrefab;//预制体 \[SerializeField\] private float cloneDuration;//克隆持续时间** **public void CreatClone(Transform newtransform) { GameObject newclone= GameObject.Instantiate(ClonePrefab);//创建预制体对象** **newclone.GetComponent\().SetupClone(newtransform, cloneDuration);//更改位置和冷却时间 }** ### PlayerDashState脚本: Enter中: **_Player.skill.clone.CreatClone(_Player.transform);//进入时调用创建预制体函数** 演示:![](https://i-blog.csdnimg.cn/direct/babf17582e3a44c9b99375c75f3ca99d.png) ## 2.实现克隆体的攻击功能 首先创建动画参数AttackNumber,大于0时进入空状态,等于1,2,3时分别播放攻击动画123 ### Clone_Skill脚本: **\[SerializeField\] private bool canAttack;//克隆体是否可以攻击** **newclone.GetComponent\().SetupClone(newtransform, cloneDuration, canAttack);//传入上面参数** ### Clone_Skill_Control脚本: **private Animator anim;//动画组件** **\[SerializeField\] private Transform attackCheck;//克隆体的攻击检测,需要自行修改预制体,添加攻击检测的子对象 \[SerializeField\] private float attackCheckRadius = .8f;** **private Transform closestEnemy;//检测最近的敌人** **private void AnimationTrigger()//攻击动画结束时调用的函数,克隆体删除 { CloneTimer = -1f; }** **private void AttackTrigger()//攻击动画中的一帧调用的函数 { Collider2D\[\] collider2Ds = Physics2D.OverlapCircleAll(attackCheck.position, attackCheckRadius);** **foreach (var hit in collider2Ds) { if (hit.GetComponent\() != null) { hit.GetComponent\().Damage(); } } }** **private void FacingClosestEnemy()//克隆体转向的函数,在SetupClone()中调用 { Collider2D\[\] collider2Ds = Physics2D.OverlapCircleAll(transform.position,25); float closestEnemyDistance = Mathf.Infinity;//设置最小距离 foreach (var hit in collider2Ds) { if (hit.GetComponent\() != null) { float distanceToEnemy=Vector2.Distance(transform.position,hit.transform.position);//计算与每个敌人的距离** **if(distanceToEnemy \< closestEnemyDistance) { closestEnemyDistance = distanceToEnemy;//更新最小距离 closestEnemy = hit.transform;//记录最近的敌人的组件 } } } if(closestEnemy!=null) { if(transform.position.x\>closestEnemy.position.x)//实现翻转 { transform.Rotate(0, 180, 0); }** **} }** 演示:![](https://i-blog.csdnimg.cn/direct/c5210f206002493b93f366fa2eea7536.png)

相关推荐
charlie1145141911 小时前
CSS笔记4:CSS:列表、边框、表格、背景、鼠标与常用长度单位
css·笔记·学习·css3·教程
HahaGiver6665 小时前
Unity与Android原生交互开发入门篇 - 打开Unity游戏的设置
android·unity·交互
wanhengidc5 小时前
云手机的基本原理
运维·服务器·游戏·智能手机·云计算
✎ ﹏梦醒͜ღ҉繁华落℘5 小时前
FreeRTOS学习笔记(应用)-- 各种 信号量的应用场景
笔记·学习
星星火柴9365 小时前
笔记 | C++面向对象高级开发
开发语言·c++·笔记·学习
就是有点傻5 小时前
使用PaddleOCRSharp大模型精选文字识别
c#
BeingACoder5 小时前
【SAA】SpringAI Alibaba学习笔记(一):SSE与WS的区别以及如何注入多个AI模型
java·笔记·学习·saa·springai
LeonDL1685 小时前
【通用视觉框架】基于C#+Winform+OpencvSharp开发的视觉框架软件,全套源码,开箱即用
人工智能·c#·winform·opencvsharp·机器视觉软件框架·通用视觉框架·机器视觉框架
安全不再安全6 小时前
免杀技巧 - 早鸟注入详细学习笔记
linux·windows·笔记·学习·测试工具·web安全·网络安全
@LYZY6 小时前
Unity TextMeshPro 文本对齐方式详解
unity·游戏引擎·textmeshpro·tmp