ぼっちプログラマのメモ

UE4とかUE5とかについて書いたり書かなかったり。

Unity勉強 五日目(GUI Layout・円運動・衝突時の処理)

今日も↓のサイトを中心にお勉強。そろそろ卒業かな
http://www40.atwiki.jp/spellbound/pages/1313.html


今後定期的に使いそうなコード

GUI Layout
FPS計測のGUI Layout表示版。ついでに現在時刻表示も

private void OnGUI()
{
	GUILayout.BeginHorizontal ("box");
		GUILayout.Box(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), GUILayout.Width(200));
		GUILayout.Box("FPS:" + mFps.ToString() + "  ( " + 1.0f / mFps * 1000.0f + " ms)", GUILayout.Width(200));
	GUILayout.EndHorizontal ();
}


・指定したGameObjectを中心に円運動
positionを計算する方法と、RotateAround関数を使う方法の二通り
特に検証していないけど、後者の方がいい気がする

public GameObject mTarget;		// ターゲット
public float mSpeedAngle = 10.0f;	// 回転速度( degree/s )
	
//public float radius = 15.0f;	// ターゲットまでの距離
//public float angle = 0.0f;	// 角度

void Update () 
{
	if( null != mTarget ){
			
		//Vector3 pos = mTarget.transform.position;
		//transform.LookAt(pos);	// ターゲットの方向へ向き変更
		// ターゲットの周りを円運動
		//transform.position = new Vector3(pos.x + Mathf.Cos(angle) * radius, pos.y + radius, pos.z + Mathf.Sin(angle) * radius);
		//angle += 0.01f;
			
		// 第1引数:回転中心 第2引数:回転軸(今回はy軸中心) 第3引数:回転量
		transform.RotateAround( mTarget.transform.position, Vector3.up, mSpeedAngle * Time.deltaTime );

	}
}

・衝突時の処理
Detonator Explosion Frameworkの導入テストも兼ねて
nameでの衝突対象の判断は色々面倒なので、tagの方がいい気がする

public GameObject mDetonatorPrefab;	// Detonator Explosion FrameworkのPrefab

// 衝突した瞬間の処理
private void OnCollisionEnter(Collision collision)
{
	// Detonator Explosion FrameworkのPrefabのインスタンス生成
	if( null != mDetonatorPrefab ){
		
		// 衝突対象のチェック
		//if( collision.gameObject.name == "Cube(Clone)" ){	// nameで
		if( collision.gameObject.tag == "Cube" ){		// tagで

			// 爆発生成
			Instantiate( mDetonatorPrefab, transform.position, Quaternion.identity);
				
			// 自身と衝突相手を削除
			Destroy( collision.gameObject );
			Destroy( this.gameObject );
		}
	}
}


その他

・一度prefabにすると、子オブジェクトの追加が面倒 ( 参考:http://pukapuka-ahirusan.blogspot.jp/2011/10/blog-post_31.html )
今の所の追加手順
① Hierarchyにprefabをぶち込む
② ぶち込んだオブジェクトに子を追加
③ 編集したオブジェクトをprefabにドラッグ(上書きする)

…もっとキレイな方法がある気がするな~


・パーティクル
「Emitter」は昔のシステムで、現在は「Shuriken」を使うらしい
で、下のサイトを参考に使ってみた。キレイキレイ
http://marupeke296.com/UNI_PT_No1_Shuriken.html

一応、Emitterも現在のUnityで使えるらしい
http://d.hatena.ne.jp/nakamura001/20130125/1359130053


・現状(WebPlayer)
※音注意
https://dl.dropboxusercontent.com/u/30427841/Unity_web/0811/Desktop.html