パーティクルのように、オブジェクトに組み込んで使う拡張機能を「コンポーネント」という。
Unityの<Component>メニューに用意されているものは、すべてコンポーネント。
コンポーネントは後付けの機能だから、TransformやRendererのように標準でオブジェクトが保管されたプロパティが用意されているわけではない。
スクリプトから利用するには、そのコンポーネントのオブジェクトを取り出す必要がある。
Unityの<Component>メニューに用意されているものは、すべてコンポーネント。
コンポーネントは後付けの機能だから、TransformやRendererのように標準でオブジェクトが保管されたプロパティが用意されているわけではない。
スクリプトから利用するには、そのコンポーネントのオブジェクトを取り出す必要がある。
ParticleSystem 変数 = (ParticleSystem) <GameObject>.GetComponent("ParticleSystem");
ポイントは、(ParticleSystem)を使ってオブジェクトをキャストしている点。
GetComponentをしただけだと取り出されるのはComponentというクラスのインスタンス。
ParticleSystemを取り出すには、GetComponentしたものをParticleSystemクラスにキャストして変換しないといけない。
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); } } } } }
持続時間
エミッションが有効かどうか
これがfalseだとパーティクルが表示されない。
重力の影響
これにより放出されたパーティクルがゆっくり落ちて来たりする。
一時停止中かどうか
一時停止中ならtrue。
再生中かどうか
再生中ならtrue。
停止中かどうか
停止しているならtrue。
ループするかどうか
trueならループ再生する。
パーティクル数を調べる
読み取り専用で変更不可。
再生速度
1が標準速度で、数字が増えるほど速くなる。
起動時に自動再生するか
trueだと自動再生する。
起動時の色
値はColor構造体のインスタンス。
起動時の遅延時間
パーティクルの起動時のサイズ
フェフォルとのサイズが1.0。
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。
再生を開始する
引数はない。
一時停止する
その後、またPlayを実行すればそこから再生を続ける。
停止する
これは一時停止ではなく、完全に終えてしまう。
再度Playすると、また最初から再生を開始する。
パーティクルをクリアする
パーティクルを放出する
引数はint値。
<ParticleSystem> .Play();パーティクスの再生を開始する。
引数はない。
一時停止する
<ParticleSystem> .Pause();再生を一時停止する。
その後、またPlayを実行すればそこから再生を続ける。
停止する
<ParticleSystem> .Stop();再生を停止する。
これは一時停止ではなく、完全に終えてしまう。
再度Playすると、また最初から再生を開始する。
パーティクルをクリアする
<ParticleSystem> .Clear();現在、放出されているパーティクルをすべて消去する。
パーティクルを放出する
<ParticleSystem> .Emit( 整数 );引数に指定した数のパーティクルを放出する。
引数はint値。
コメントをかく