例えばミサイルにTrailをつける場合、ミサイルが消滅するとトレイルも一緒に消えてしまいます。
Trailをミサイルの子に付け、ミサイル消滅時に切り離すことで綺麗にフェードアウトできるようにしてみます。
TrailFadeOut.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TrailFadeOut : MonoBehaviour {
[SerializeField, Range(0f,1f)] float forrowRate = 0f;
[SerializeField, Range(0.1f, 4f)] float fadeTime = 1f;
Coroutine coro;
TrailRenderer trail;
Vector3 oldPos;
// Use this for initialization
void Start () {
coro = null;
trail = GetComponent<TrailRenderer>();
oldPos = transform.position;
}
// Update is called once per frame
void Update () {
if(transform.parent==null){
if (coro == null){
Vector3 spd = (transform.position - oldPos) / Time.deltaTime;
coro = StartCoroutine(trailFadeCo(spd));
}
}else{
oldPos = transform.position;
}
}
IEnumerator trailFadeCo(Vector3 _spd){
Color defCol = trail.material.GetColor("_TintColor");
Color col = defCol;
yield return null;
while(col.a>0f){
col.a = Mathf.Max(col.a-Time.deltaTime/fadeTime, 0f);
trail.material.SetColor("_TintColor",col);
transform.position += _spd * forrowRate * Time.deltaTime;
yield return null;
}
Destroy(gameObject);
}
}
Trailは親から切り離されるとフェードアウトを開始し、消えてから自分自身をDestroy()します。
trail.material.SetColor("_TintColor",col);
の部分はTrailに使用しているシェーダーによって適宜書き換えてください。
_Colorプロパティがある場合は
trail.material.color = col