Unity3d / Trail Renderer

2011.05.08 | unity3d

Unity3dのTrailRendererを使ってみます。
メニューのComponent -> Particles -> Trail Renderer です。
見え方としてはラインの描画になるのですが、Particlesに属しています。
ラインなのにパーティクルに属しているのに違和感あるのですが、このラインはカメラに対して常に表面を向きます。
常にカメラを向くのでオブジェクトに陰影はつきません。normalsが無い状態?です。
マテリアルもParticles系を指定して使うのが使いやすいです。
そういう動作的なところはParticlesと同じような動きになります。

[ demo ]


Line Rendererも同じようにカメラを向くラインです。
InspectorのPositionsのSizeを追加してラインをつないでいきます。
Trail Rendererは、Line RendererをParticleのように時間を設定して、表示される時間の間表示します。
あるGameObjectにTrailRendererを追加すると、そのオブジェクトの移動した位置をつなげていくラインがひかれていきます。
ラインの太さや色は、StartWidth / EndWidth、Colorsで指定します。

ラインのスクリプトはLineScript.js。
Trail Rendererを設定したGameObjectに設定しています。
変数のtargetTransにターゲットとなるGameObjectを設定し、このターゲットはiTweenをつかってランダムに移動させています。
同じような6つほどつくって動かしています。
そのうち1つにParticle Systemを組み込んでパーティクルを生成していっています。
ターゲットの動きはRandamMove.jsです。

public var tX: float = 0;
public var tY: float = 0;
public var tZ: float = 0;

public var xs: float = 0;
public var ys: float = 0;
public var zs: float = 0;

public var vx: float = 0;
public var vy: float = 0;
public var vz: float = 0;

public var a: float = 0.03;

public var targetTrans: Transform;

private var trans: Transform;

public var dd: float = 0.96;

function Awake()
{
	trans = this.gameObject.transform;
	a =  0.03 + Random.value * 0.03;
}

function FixedUpdate () {
	tX = targetTrans.position.x;
	tY = targetTrans.position.y;
	tZ = targetTrans.position.z;
	
	xs += vx += (tX - xs ) * a;
	ys += vy += (tY - ys ) * a;
	zs += vz += (tZ - zs ) * a;
	vx *= dd;
    vy *= dd;
    vz *= dd;
}
function Update()
{
	trans.position = new Vector3(xs, ys, zs);
}
private var moveObj: GameObject;

function Start()
{
	moveObj = this.gameObject;
	
	_startRandomMov();
}

function Update () {
	if(Input.GetKey("r")){
		_randomPosTween();
	}
}

private function _startRandomMov()
{
	_randomPosTween();
}

private function _randomPosTween(): void
{
	var easeType = iTween.EaseType.easeInOutSine;
	var toVec: Vector3 = new Vector3(Random.Range(-50, 50), Random.Range(-50, 50), Random.Range(-50, 50));

	iTween.MoveTo(moveObj, {
		"position":toVec, "time":0.5, "easetype":easeType,
		"oncompletetarget":this.gameObject, "oncomplete":"_postionComplete"
	});
	
}

private function _postionComplete()
{
	_randomPosTween();
}

やってることは、このエントリーのlines3dと同じです。

一応プロジェクト一式のunitypackageです。
iTweenを使用しているので、サイトもしくはAssetStoreよりダウンロードを。
line_test.unitypackage

There are no comments.

Please Leave a Reply

TrackBack URL :

pagetop