だらだら〜自由自在〜

インディーゲーム制作チーム GAME GABURI でプログラム担当してます

今日は日曜

会社で仕事しようと思ってたけどメンドくさくなったのでやめ。
多分大丈夫だよ…ね?…
それより最近プログラムしてなかったので。

FixedUpdate

この関数の意味がわかんなかったけど、いや今でもよく解らんけどRigidBody使ってるやつはここで座標の更新とかするらしい。
確かにそうしないで座標移動とかさせると、DeltaTime掛けていてもガタツク。
逆にUpdateで移動させていてもFixedDeltaTime掛けると安定する。物理計算しているタイミングの影響かな。

はて、どうやって作っていくか…

ミサイルから作ってみることにした。
発射したあとちょっとづつターゲットに向きを変えながら加速するミサイルを作った。

子GameObjectのDestroy

ミサイルの子GameObjectとしてパーティクルを付けていて(インスペクタ上で)
ミサイルがターゲットにあたってDestroyされ、そのまま子もDestroyしちゃうと
パーティクルが一緒に消えてしまう。ミサイルが消えた一定時間後にパーティクルを消したい。

まずDetachChildren()でミサイルDestroy直前にパーティクルを子から外すようにした。
これでミサイルDestroyと一緒に消えなくなってうまく行った。

しかし今度はパーティクルがDestroyされなくて残ってしまう。
ParticleAnimatorのAutoDestructとか使ってみるが上手くいかない。
OneShotプロパティをONにしてやろうと思ったけど、ランタイムでは操作できないっぽい。
GetComponentInChildren()でパーティクルのTarnsformをとってきて、Destroyするも

 Can't remove component.
 Can't remove Transform because EllipsoidParticleEmitter, ParticleAnimator, ParticleRenderer depends on it

こんなふうにいわれて、Transformは消せなかった。
じゃあパーティクルのGameObjectを拾ってきてDestroyしちゃる!とおもってFind("emitter")してみる
でも多分これシーンで最初に見つかったやつを拾ってくるだけで、(ミサイルから見て)自分のパーティクルじゃないかもしれない。

確実にイケそうなのは、パーティクルにスクリプトつけてデストロイを自分で読んでもらうことだが、
なんでそんなことワザワザする必要があるのか!?とおもってムカつく。
Destroyには時間を指定して、その時間が立ったらDestroyするようにできるのでそれを使いたい。