最近のUnity開発関連

最近リアルなワークが開発させまいとばかりに迫ってきます。
進捗の遅れは・・・日曜をフルに使って・・・ッ

さて、ではここ最近でのUnityで困ったこと、そして解決策をば。
※一部UnityというよりC#

■パーティクルの速度を管理したい

→ParticleSystem.Simulate(時間, true, false);
たとえばTime.deltaTimeで通常、deltaTime*0.5で1/2倍速になる。
後述するアニメーションの管理と同様の方法でこちらも指定時間化に。

■メソッドを指定時間後に実行して、さらにタイマーの管理も個別(TimeScaleを弄らない)に行いたい。ついでに複数記憶してたい。

経緯:攻撃処理で何秒後にエフェクトがでて攻撃判定がこのタイミングとこのタイミングで・・・とかやりたい。アニメーションにイベント登録が一番確実だけどアニメーションは使いまわすから専用モーションになってもらっても困る。コルーチンでもいいけどヒット硬直でのタイミングずれ考慮してコルーチン側も様子見るとか考えたくない。

→ある程度デリゲート用意しといて(EffectPlayとかPlaySEとか)指定時間後にぽいぽい勝手に吐き出すクラスを作成した。あと、スロー時とか硬直で停止にも対応できるよう、原則として登録元から時間指定で更新処理をしてあげる。
使うときは基本的に呼び出しタイミングと予約するメソッドを好きなだけ放り込んで、あとは好きな時間(物理かupdateかスロー中かとか)で進めてあげればいい。

具体的な例を挙げると↓な感じで予約
(0.5秒後にEffectPlay関数を呼ぶ)
//エフェクト予約
this.onEventAction.AddEffectPlay(this.EffectPlay, 0, ref this.m_EffectManager, 0.5f);

物理でも描画でも好きなステップで更新処理をする
this.onEventAction.UpDate(Time.fixedDeltaTime);

Time.fixedDeltaTimeに0.5かければスロー中、みたいなことも可能
書いてて気づいたけどこれAdd系関数複数いらぬわ。オーバーロードでいい。さらにいうならActionでいいじゃないかこれ。
本来なら読んだ先の管理も考えるなら自前の時間管理をすべし。

ま、まぁうまく管理する人ならコルーチンでもなんでもうまくやるのかもしれないけど、今回はなるべく目に見える管理&未来の他言語移植も考えて。

■指定時間アニメーションをスローや加速、停止したい

this.animator.speed = speed;
//指定時間後に元に戻す
StartCoroutine
(
         //指定時間後に実行するコルーチンさん
this.DelayMethod( 戻すまでの時間, () =>
{ this.animator.speed = 1f; }
)
);

以上。さっそく上で書いたことと矛盾していくスタイル。
いつか自前の時間管理にするから、きっと、たぶん。

・・・最近なんかこう、露骨にモデリングから逃げてる。
管理部分や基底クラスは充実する一方だけど、新しいモデルは一切できてこないっていうね。モデリング面倒くさくてきらいなんじゃ・・・

テーマ : ゲーム - ジャンル : ゲーム

リンク
報告
20150405 新カテゴリ追加
月別アーカイブ