UnityでVJするときのコードを良く忘れるのでメモ。超・簡単なので、これくらい空で書けるようになれば良いのですがJSとC#行ったりきたりするとある日突然忘れたりする事が多いので。
今回書くのは大きく分けて3つのスクリプトです。他にも色々あるのだけど全部書くと多すぎるのでちょっとずつ出していこうかな、と。
①キー操作 ②時間で処理する ③パーティクルじゃなくてオブジェクトON/OFFしたい
①キー操作
キーを押してる時にGetkeyに書いてある処理をやって離したらkeyUpのを処理をします。主に外付けMIDI機材とかじゃなくて簡単にキーでVJ操作したいときにつかってます。
外付けMIDIの時も同じようにUpdateのメソッドで呼んでます。そのうち限界来そうだけど。
■JS
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#pragma strict function Start () { particleEmitter.emit = false; } function Update () { if (Input.GetKey(KeyCode.V)){ //ここにやりたい処理を書く particleEmitter.emit = true; } if (Input.GetKeyUp(KeyCode.V)){ particleEmitter.emit = false; } } |
■C#
1 2 3 4 5 6 7 8 |
void Update() { if (Input.GetKey(KeyCode.V)){ _intensity = 1; } else if (Input .GetKeyUp(KeyCode.V)){ _intensity = 0; } } |
どっちの言語でもほぼほぼ同じですね。
Updateは定期的に呼ばれるメソッドになります。
ここにコード書くと都度判定が呼ばれるので最適かと言われると微妙なのですが一番楽です。
JS側のはパーティクルの出し分けをしてます。
最初に呼ばれるStartの所でemitをfalseにしているので最初は出ません。
Vキーを押した時だけemitがtrueになってパーティクルが出ます。
ただ、emitのON/OFFなのでオブジェクトはメモリ上に残ります。
本当はdestroyしてあげた方が負荷は軽くなります。
②時間で処理する
次は操作じゃなくて時間処理です。
これはサビだけパーティクル出したい、みたいな時に使ってます。
■JS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#pragma strict function Start () { particleEmitter.emit = false; //時間指定部分 Invoke("StartEmit" , 10); Invoke("StopEmit" , 20); } function StartEmit(){ particleEmitter.emit = true; } function StopEmit(){ particleEmitter.emit = false; } |
Invokeが時間を管理してくれます。
この場合、Startの中で時間を指定して、特定の時間になるとメソッドが呼ばれて処理します。
Updateでやるよりは負荷ないです。オートVJやりたい時によく使います。でも結構面倒くさいです。
③パーティクルemitじゃなくてオブジェクトON/OFFしたい
次はパーティクルじゃなくてオブジェクトをON/OFFしたいんだって時。
■JS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#pragma strict function Start () { gameObject.SetActiveRecursively(false); Invoke("Active" , 40.5); Invoke("death" , 121); Invoke("Active" , 159); } function Active(){ gameObject.SetActiveRecursively(true); } function death(){ gameObject.SetActiveRecursively(false); } |
これはInspecterでチェックのON/OFFするのと同じです。
時間管理で出したり消したりしてます。
先ほどと同様にdestroyするわけじゃないのでメモリ上には残ります。
こんな感じでお好みのオブジェクトとかパーティクルの出し分けすればVJは出来ます。
ゲームとかだと当然の知識どころか、もっと負荷対策考えた方が良いんですけどね。
「VJやりたいのです!」という方が多いので、はじめの一歩から、という事で。
Assetで用意されているScriptでも上記を入れれば操作出来るようになります。
出来れば専用のコントロールスクリプトにしたいとこですが今は実験する事が多いので都度書いてます。
では。