Unity5学習の際の覚え書き。

パーティクルの作成手順

1.空のゲームオブジェクトを作成
2.作成した空のゲームオブジェクトを選択し、Component -> Effects -> Particle Systemを組み込む

コンポーネントとパーティクルシステム

パーティクルのように、オブジェクトに組み込んで使う拡張機能を「コンポーネント」という。
Unityの<Component>メニューに用意されているものは、すべてコンポーネント。
コンポーネントは後付けの機能だから、TransformやRendererのように標準でオブジェクトが保管されたプロパティが用意されているわけではない。
スクリプトから利用するには、そのコンポーネントのオブジェクトを取り出す必要がある。

コンポーネントを取り出す

GetComponentメソッドを使って取得する。
Component 変数 = <GameObject> .GetComponent ( コンポーネント名 );

パーティクルシステムを取り出す

ParticleSystem 変数 = (ParticleSystem) <GameObject>.GetComponent("ParticleSystem");

ポイントは、(ParticleSystem)を使ってオブジェクトをキャストしている点。
GetComponentをしただけだと取り出されるのはComponentというクラスのインスタンス。
ParticleSystemを取り出すには、GetComponentしたものをParticleSystemクラスにキャストして変換しないといけない。

設置してある4つのキューブに触れると、キューブが消えてパーティクルが表示されるスクリプト

public class myscript : MonoBehaviour {
	GameObject[] cubes = new GameObject[4];
	GameObject[] gos = new GameObject[4];

	void Start () {
		GameObject.Find ("GUI Text").GetComponent<GUIText> ().text = "Collision Event sample";
		for (int i = 0; i < 4; i++) {
			cubes [i] = GameObject.Find ("Cube" + i);
			gos [i] = GameObject.Find ("GameObject" + i);
		}
		GameObject[] objs = GameObject.FindGameObjectsWithTag ("Player");
		foreach (GameObject obj in objs) {
			if (obj.name != "Sphere") {
				Color c = obj.GetComponent<Renderer> ().material.color;
				c.a = 0.5f;
				obj.GetComponent<Renderer> ().material.color = c;
				obj.GetComponent<Renderer> ().material.shader= Shader.Find ("GUI/Text Shader");
			}
		}
	}

	void Update () {
		// 4つのキューブ全てに回転を加える
		foreach (GameObject obj in cubes) {
			obj.transform.Rotate (new Vector3 (1f, 1f, 1f));
		}

		// Spehereの現在位置を取得し、その値を調整してカメラ位置に設定
		Vector3 v = transform.position;
		v.y += 2;
		v.z -= 7;
		Camera.main.transform.position = v;

		// Sphereを動かすスクリプト
		if (Input.GetKey (KeyCode.LeftArrow)) {
			GetComponent<Rigidbody>().AddForce (new Vector3 (-1f, 0, 1f));
		}
		if (Input.GetKey (KeyCode.RightArrow)) {
			GetComponent<Rigidbody>().AddForce (new Vector3 (1f, 0, -1f));
		}
		if (Input.GetKey (KeyCode.UpArrow)) {
			GetComponent<Rigidbody>().AddForce (new Vector3 (1f, 0, 1f));
		}
		if (Input.GetKey (KeyCode.DownArrow)) {
			GetComponent<Rigidbody>().AddForce (new Vector3 (-1f, 0, -1f));
		}
	}

	void OnTriggerEnter(Collider collider){
		if (collider.gameObject.name.StartsWith ("Cube")) {
			for (int i = 0; i < 4; i++) {
				// 衝突した相手がキューブなら、次の処理を行う。
				// パーティクルを取り出して再生、キューブを消す。
				if (cubes [i] == collider.gameObject) {
					ParticleSystem ps = (ParticleSystem)gos [i].GetComponent ("ParticleSystem");
					ps.Play ();
					cubes [i].SetActive (false);
				}
			}
		}
	}
}

ParticleSystemクラスについて

主なプロパティ
持続時間
float 変数 = <ParticleSystem> .duration;
パーティクルシステムの持続時間。読み取り専用で変更不可。

エミッションが有効かどうか
bool 変数 = <ParticleSystem> .enableEmission;
パーティクルシステムのエミッションが有効かどうか示すもの。
これがfalseだとパーティクルが表示されない。

重力の影響
float 変数 = <ParticleSystem> .gravityModifier;
重力の大きさを示す値。
これにより放出されたパーティクルがゆっくり落ちて来たりする。

一時停止中かどうか
bool 変数 = <ParticleSystem> .isPaused;
パーティクルの再生が一時停止中かどうかを示すもの。
一時停止中ならtrue。

再生中かどうか
bool 変数 = <ParticleSystem> .isPlaying;
パーティクルが再生中かどうか。
再生中ならtrue。

停止中かどうか
bool 変数 = <ParticleSystem> .isStopped;
パーティクルが停止中かどうか。
停止しているならtrue。

ループするかどうか
bool 変数 = <ParticleSystem> .loop;
パーティクルを繰り返し再生(ループ)するかどうか。
trueならループ再生する。

パーティクル数を調べる
int 変数 = <ParticleSystem> .particleCount;
現在、表示されているパーティクルの数を返す。
読み取り専用で変更不可。

再生速度
float 変数 = <ParticleSystem> .playbackSpeed;
パーティクルの再生速度を示す。
1が標準速度で、数字が増えるほど速くなる。

起動時に自動再生するか
bool 変数 = <ParticleSystem> .playOnAwake;
起動時に自動的にパーティクルの再生を開始するかどうかを示す。
trueだと自動再生する。

起動時の色
Color 変数 = <ParticleSystem> .startColor;
パーティクル放出時の色を示す。
値はColor構造体のインスタンス。

起動時の遅延時間
float 変数 = <ParticleSystem> .startDelay;
パーティクル開始から実際に再生が始まるまでの遅延時間をfloatで示す。

パーティクルの起動時のサイズ
float 変数 = <ParticleSystem> .startSize;
パーティクル放出時の大きさを示す。
フェフォルとのサイズが1.0。
主なメソッド
再生を開始する
<ParticleSystem> .Play();
パーティクスの再生を開始する。
引数はない。

一時停止する
<ParticleSystem> .Pause();
再生を一時停止する。
その後、またPlayを実行すればそこから再生を続ける。

停止する
<ParticleSystem> .Stop();
再生を停止する。
これは一時停止ではなく、完全に終えてしまう。
再度Playすると、また最初から再生を開始する。

パーティクルをクリアする
<ParticleSystem> .Clear();
現在、放出されているパーティクルをすべて消去する。

パーティクルを放出する
<ParticleSystem> .Emit( 整数 );
引数に指定した数のパーティクルを放出する。
引数はint値。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

【メニュー編集】
Wiki記法ガイド

リンク

ゲームバー大阪心斎橋

ゲームバー大阪梅田

ゲームバー大阪心斎橋

ダーツ&ダイニングバー大阪梅田

メニュー

Unity


スマホ操作

Unity - GameObject

Unity - 3DCG

メンバーのみ編集できます