Unity3d 中的 Trail Renderer 可以自動繪出物件移動的軌跡,可是當我們將 Trail Renderer 的 enabled 設定為 false 時,只能暫時停止軌跡的繪製,但是將 enabled 設定為 true時,就會將之前未繪出的軌跡一併繪出,是否可以只畫出 enabled=true之後的軌跡呢? 答案是肯定且簡單的,只要將 Trail Renderer 的 time 設定為 0, 它就不會保留之前的軌跡,而當程式中將 enabled 設為 true 時,也將 time 設定為所需要延遲消失的時間即可。
private TrailRenderer tr;
...
// 取得子物件中的 TrailRenderer 元件
tr = bird0.GetComponentInChildren <TrailRenderer>();
// 啟用取得的 TrailRenderer元件
tr.enabled = true;
// 設定軌跡消失延遲時間 (seconds)
tr.time = 5;
而如果希望物件在發生碰撞後,及不要再繪出軌跡,但又要將之前軌跡留在畫面上,就不能將 enabled 設為 false, 因為這樣會使所有軌跡立即消失。
解決方法是將 TrailRenderer掛在一個空物件上,而此空物件則成為主要物件的子物件,因此可以畫出主物件的移動軌跡。當發生碰撞時,則將此空物件脫離主物件,而由於空物件沒有質量,所以會立即停止移動,軌跡也就停止了。
// 以下掛在 TrailRenderer所屬空物件的父物件上
void OnCollisionEnter(Collision collision)
{
// 與所有子物件脫離
transform.DetachChildren ();
//停止物件移動速度
transform.rigidbody.velocity = new Vector3 (0, 0, 0);
Destroy (gameObject, 2);
}
}
沒有留言:
張貼留言