2014年5月8日 星期四

Unity3d Trail Renderer 的使用技巧

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);
}
}

沒有留言:

張貼留言