饂飩コーディング

iOSアプリやら、Unityやら、Cocos2dやらごにょごにょ書いております

LineRendererで線を引いてみよう

f:id:appdeappuappu:20140603211219p:plain
↓実行結果
http://nrtkb.sakura.ne.jp/forblog/unityFolder/lineRendererWeb.html

こんな感じでオブジェクトを線で結ぶ場合は、LineRenderer compornentsを使用します

両端のobjectが固定の場合(添付画像の緑線でつながっている場合)

1、empty Objectを作成してLineRendererObjectと名前をつける
2、LineRendererObjectにLineRenderer compornentをAddする
3、LineRendererObjectに以下のLineRendererScript1を追加する
4、Cube objectを二つそれぞれCube1,Cube2という名前で設置する

using UnityEngine;
using System.Collections;

public class LineRendererScript1 : MonoBehaviour {
	
	void Start () {
	
	}

	void Update () {
		GameObject cube_1 = GameObject.Find("Cube1");
		GameObject cube_2 = GameObject.Find("Cube2");
		LineRenderer lineY = GameObject.Find ("LineRendererObject").GetComponent<LineRenderer> ();
		
		lineY.SetPosition(0, cube_1.transform.position);
		lineY.SetPosition(1, cube_2.transform.position);
	}
}


両端が固定で線をアニメーションさせる場合
1、empty objectを作成し、LineRenderer componentを追加する
2、LineAnimation Scriptを作成しLineRender Componentに追加する
3、始点のSphere、終点のSphereを設置しLineAnimation ScriptのPublic変数をこの二つのobjectで設定する
f:id:appdeappuappu:20140603224416p:plain

using UnityEngine;
using System.Collections;

public class LineAnimation : MonoBehaviour {

	private LineRenderer lineRenderer;
	private float count;
	private float howLong;

	public Transform saisyo;
	public Transform kokohe;
	public float lineDrawSpeed;


	void Start () {
		lineRenderer = GetComponent<LineRenderer> ();
		lineRenderer.SetPosition (0, saisyo.position);
		lineRenderer.SetWidth (.1f, .1f);

		howLong = Vector3.Distance (saisyo.position,kokohe.position);
	}
	
	void Update () {
		if (count < howLong) 
		{
			count += .1f / lineDrawSpeed;

			float x = Mathf.Lerp(0,howLong,count);

			Vector3 pointA = saisyo.position;
			Vector3 pointB = kokohe.position;

			Vector3 pointAlongLine = x * Vector3.Normalize(pointB - pointA) + pointA;


			lineRenderer.SetPosition(1,pointAlongLine);
		}
	}
}

線の描画がアニメーションかつ繰り返しば場合

線が最長になった時に以下の様にインデックスを0にして線を消す

lineRenderer.SetVertexCount(0);

その後再描写を行う様に

lineRenderer.SetVertexCount(2);
lineRenderer.SetPosition (0, origin.position);
lineRenderer.material=materials[1];

もう一度インデックスを二つにし、SetPosition,Materialの再設定をおこなう