Unity类银河战士恶魔城学习总结(P166 Ailments FX 异常状态伤害粒子特效)

news/2024/12/11 19:18:35/

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili

教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/

本章节创建了三种粒子特效火焰寒冰雷电

主场景创建/特效/粒子

初始的例子特效

火焰

寒冰

雷电

EntityFX.cs

更改的部分!!!

进入三个状态添加特效

ShockFxForIgniteFxForChillFxFor,它们用于分别触发不同的视觉效果(电击、点燃、冰冻效果)。每个方法都会触发对应的效果并改变物体的颜色,持续一定时间后停止颜色变化。

总结分析

  1. 共同点

    • 所有三个方法都播放一个对应的视觉特效(电击、点燃或冰冻),通过调用 Play() 播放特效。
    • 通过 InvokeRepeating 方法周期性地触发对应的颜色变化函数(ShockColorFxIgniteColorFxChillColorFx),使物体的颜色呈现闪烁或渐变效果。
    • 通过 Invoke 方法在一定时间(_seconds)后停止颜色变化,调用 CancelColorChange 方法。
  2. 目的

    • 这些方法的目的在于通过视觉效果来模拟不同的状态,如电击、燃烧、冰冻等。通过定时触发颜色变化,表现出物体在不同状态下的效果。
    • InvokeRepeating 的使用使得颜色变化在指定时间内不断变化,而 Invoke 则用来在效果持续一段时间后停止。
    public void ShockFxFor(float _seconds){shockFx.Play();InvokeRepeating("ShockColorFx", 0, .3f);Invoke("CancelColorChange", _seconds);}public void IgniteFxFor(float _seconds){igniteFx.Play();InvokeRepeating("IgniteColorFx", 0, .3f);Invoke("CancelColorChange", _seconds);}public void ChillFxFor(float _seconds){chillFx.Play();InvokeRepeating("ChillColorFx", 0, .3f);Invoke("CancelColorChange", _seconds);}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class EntityFX : MonoBehaviour
{private SpriteRenderer sr;[Header("Flash FX")][SerializeField] private float flashDuration;[SerializeField] private Material hitMat;private Material originalMat;[Header("Ailment colors")]//异常状态颜色[SerializeField] private Color[] chillColor;[SerializeField] private Color[] igniteColor;[SerializeField] private Color[] shockColor;[Header("Ailment particles")][SerializeField] private ParticleSystem igniteFx;[SerializeField] private ParticleSystem chillFx;[SerializeField] private ParticleSystem shockFx;private void Start(){sr = GetComponentInChildren <SpriteRenderer>();//这行代码使用 GetComponentInChildren 方法查找并获取当前游戏对象或其子对象中的 SpriteRenderer 组件,并将其赋值给 sr 变量。originalMat = sr.material;}public void MakeTransprent(bool _transparent)//攻击命中时候的透明特效{if (_transparent)sr.color = Color.clear;elsesr.color = Color.white;}private IEnumerator FlashFX()//定义了一个私有的协程 FlashFX,用于在一段时间内改变 SpriteRenderer 的材质,然后恢复原始材质。{sr.material = hitMat;Color currentColor = sr.color;//保存最开始的颜色,闪光之后变回去sr.color = Color.white;yield return new WaitForSeconds(flashDuration);sr.color = currentColor;sr.material = originalMat;}//P59,骷髅战士的血条闪烁private void RedColorBlink(){if(sr.color !=Color.white)sr.color = Color.white;else{sr.color = Color.red;}}private void CancelColorChange(){CancelInvoke();//调用 CancelInvoke 方法取消所有与当前游戏对象关联的 Invoke 调用。sr.color = Color.white;igniteFx.Stop();chillFx.Stop();shockFx.Stop();}//10月30日//三个状态的携程public void ShockFxFor(float _seconds){shockFx.Play();InvokeRepeating("ShockColorFx", 0, .3f);Invoke("CancelColorChange", _seconds);}public void IgniteFxFor(float _seconds){igniteFx.Play();InvokeRepeating("IgniteColorFx", 0, .3f);Invoke("CancelColorChange", _seconds);}public void ChillFxFor(float _seconds){chillFx.Play();InvokeRepeating("ChillColorFx", 0, .3f);Invoke("CancelColorChange", _seconds);}private void ShockColorFx(){if (sr.color != shockColor[0])sr.color = shockColor[0];else{sr.color = shockColor[1];}}private void IgniteColorFx()//燃烧状态颜色{if (sr.color != igniteColor[0])sr.color = igniteColor[0];else{sr.color = igniteColor[1];}}private void ChillColorFx()//燃烧状态颜色{if (sr.color != chillColor[0])sr.color = chillColor[0];else{sr.color = chillColor[1];}}}


http://www.ppmy.cn/news/1554302.html

相关文章

力扣92题:反转链表 II

力扣92题&#xff1a;反转链表 II 题目描述 给你单链表的头指针 head 和两个整数 left 和 right&#xff0c;其中 1 ≤ l e f t ≤ r i g h t ≤ 1 \leq left \leq right \leq 1≤left≤right≤ 链表长度。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回反转…

一些硬件知识【2024/12/6】

MP6924A: 正点原子加热台拆解&#xff1a; PMOS 相比 NMOS 的缺点&#xff1a; 缺点描述迁移率低PMOS 中的空穴迁移率约为电子迁移率的 1/3 到 1/2&#xff0c;导致导通电流较低。开关速度慢由于迁移率较低&#xff0c;PMOS 的开关速度比 NMOS 慢&#xff0c;不适合高速数字电…

Spring Retry 与 Redis WATCH 结合实现高并发环境下的乐观锁

1. 前言 在当今分布式与微服务架构盛行的互联网业务场景下&#xff0c;高并发已成为常态。无论是电商秒杀、抢购活动&#xff0c;还是在线抢票、抽奖服务&#xff0c;都需要在瞬间应对大量的请求&#xff0c;并准确、高效地更新数据状态。这类场景中一个典型的问题便是如何在高…

2024年12月7日Github流行趋势

项目名称&#xff1a;lobe-chat 项目维护者&#xff1a;arvinxx, semantic-release-bot, canisminor1990, lobehubbot, renovate项目介绍&#xff1a;Lobe Chat 是一个开源的现代化设计的人工智能聊天框架。支持多AI提供商&#xff08;OpenAI / Claude 3 / Gemini / Ollama / Q…

业务-超卖问题(易理解)

mysql悲观锁 使用 MySQL 行锁来解决超卖问题可以通过悲观锁机制来实现。悲观锁在操作数据库时会锁定相应的行&#xff0c;确保在事务完成之前其他事务无法修改这些行。以下是使用 Java 和 MyBatis 实现这一方案的步骤。 实现 1. 数据库表设计 假设我们有一个 products 表&a…

C++ - map,set

set和map介绍 map 和 set 是C STL 中提供的容器, map 和 set 的底层是基于红黑树来实现的. set 是一个包含唯一元素 (key) 的集合&#xff0c;不允许有重复的元素. map 是一个键值对 (key - value) 的集合, 每一个键 (key) 都是唯一的. map 的key - value键值对是通过 pair 来…

互联网、物联网的相关标准

互联网的相关标准 网络通信协议&#xff1a; HTTP&#xff08;Hypertext Transfer Protocol&#xff09;&#xff1a;用于在网络中传输文本、图像、音频和视频等数据的协议。它基于请求-响应模型&#xff0c;客户端发送请求给服务器&#xff0c;服务器返回响应。HTTPS&a…

zookeeper 搭建集群

基础的java 环境先安好&#xff0c;选择3台虚拟机 ip 不一样 机器应为奇数个 zookeeper 奇数个节点实际上是(2*n-1) 比偶数台机器少一台解决成本,并且能够满足 zookeeper 集群过半选举leader 的规则 # 3台虚拟机 将zookeeper 解压到服务器上 #在 conf/ 目录下 找到zoo_s…