c# - 如何在两条动画曲线之间切换,以便播放数组中的第一条动画曲线,当它结束时,它开始播放第二条?
问题描述
在这种情况下,数组中有两条动画曲线。一个用于淡入,一个用于淡出。目前我在数组中使用索引 1,但我想在索引 0 和索引 1 之间进行平滑处理,以便它会不断平滑地淡入和淡出。
我想在索引 1 处开始播放第二条动画曲线时在索引 0 处播放动画曲线。
我之前尝试过使用 for 循环,如下所示:
for (int i = 0; i < fadeIn.Length; i++)
{
_renderer.material.SetFloat(shaderProperty, fadeIn[i].Evaluate(Mathf.InverseLerp(0, spawnEffectTime, timer)));
}
但它在动画曲线之间没有变化。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpawnEffect : MonoBehaviour {
public float spawnEffectTime = 2;
public float pause = 1;
public AnimationCurve[] fadeIn;
public bool fadeOut = false;
ParticleSystem ps;
float timer = 0;
Renderer _renderer;
int shaderProperty;
void Start ()
{
shaderProperty = Shader.PropertyToID("_cutoff");
_renderer = GetComponent<Renderer>();
ps = GetComponentInChildren <ParticleSystem>();
var main = ps.main;
main.duration = spawnEffectTime;
ps.Play();
}
void Update()
{
FadeIn();
}
private void FadeOut()
{
}
private void FadeIn()
{
if (timer < spawnEffectTime + pause)
{
timer += Time.deltaTime;
}
else
{
ps.Play();
timer = 0;
}
_renderer.material.SetFloat(shaderProperty, fadeIn[1].Evaluate(Mathf.InverseLerp(0, spawnEffectTime, timer)));
}
}
解决方案
这就是我一直在寻找的。工作很棒。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpawnEffect : MonoBehaviour
{
public float spawnEffectTime = 2;
public float pause = 1;
public AnimationCurve[] fadeIn;
public bool fadeOut = false;
ParticleSystem ps;
float timer = 0;
Renderer _renderer;
int fadeIndex = 0;
int shaderProperty;
void Start()
{
shaderProperty = Shader.PropertyToID("_cutoff");
_renderer = GetComponent<Renderer>();
ps = GetComponentInChildren<ParticleSystem>();
var main = ps.main;
main.duration = spawnEffectTime;
ps.Play();
}
void Update()
{
FadeIn();
}
private void FadeOut()
{
}
private void FadeIn()
{
if (timer < spawnEffectTime + pause)
{
timer += Time.deltaTime;
}
else
{
ps.Play();
timer = 0;
if (fadeIndex == 0)
{
fadeIndex = 1;
}
else
{
fadeIndex = 0;
}
}
_renderer.material.SetFloat(shaderProperty, fadeIn[fadeIndex].Evaluate(Mathf.InverseLerp(0, spawnEffectTime, timer)));
}
}
推荐阅读
- powerbi - Power Bi 中的行级安全性有多安全?
- ruby-on-rails - 为什么终端找不到我的 Ruby 文件?(初学者)
- php - Laravel - 如何更新包含文件输入类型的表单
- python - 如何检查这些是否没有使用 cvlib 检测到人脸
- node.js - 建议我使用 nodejs 中的 Web 套接字进行私人消息传递的资源
- python - 我如何从 sqlite3_table WHERE column_name IN 变量元组中选择?
- c# - MSBuild,我可以获取 UsingTask 输出并在复制任务中使用它吗?
- html - 如何使用静态字符串为分层有序列表项编号添加前缀
- java - 确认安装了 java 11 后,Ubuntu Java 应用程序找不到命令 javac
- tensorflow - 长时间的 GPU 训练执行