Ragdollを適用した後に適用前のオブジェクトが残ってしまう状態を解決してみた
こんばんは! しんがです。
だいぶ間が空いてしまいましたが、前回の課題を解決。
(キャラクターをタッチ(クリック)したらRagdollが適用されてぐったりする - 子ノ刻ラボラトリィ)
タッチして、Ragdollを生成して吹っ飛ばすところまではできました。
でも、生成元のオブジェクトが残っていました。
「Unity Web Playerのサンプル」
解決策はいたってシンプル。
生成元のオブジェクトを削除すればいいだけ。
Destroy(gameObject)
スクリプト内でDestroy(gameObject)とすることで、GameObjectを削除できます。
ソースはこんな感じ
void Update () { // タッチしたオブジェクトとこのゲームオブジェクトが等しい if (TouchManager.selectedGameObject == gameObject) { Debug.Log ("Enemy - OnMouseDown"); // 初速をランダムで生成 float x = Random.Range (-4.0f, 4.0f); float y = Random.Range (5.0f, 20.0f); float z = Random.Range (20.0f, 50.0f); // タッチしたオブジェクトを未設定にする TouchManager.selectedGameObject = null; // ラグドールを生成 gameObject.GetComponent<RagdollGenerator>().Generate(transform, new Vector3 (x, y, z)); // このオブジェクトを削除 Destroy(gameObject); } }
解決策事態は、前回の時点でわかってたんだけど、PCがなくて検証できずでした。
Ragdollイメージ
今までの実装をまとめるとこんな感じ。
①Ragdollを適用するGameObjectからRagdollGeneratorを呼び出す
②RagdollGeneratorからRagdollを適用したGameObjectを生成する
③Ragdollを適用するGameObjectをDestroyする
DestroyするときにDestroy(this)ってやりたくなるけど、それをやるとScriptそのものが消えるので注意(笑)
GameObjectとコンポーネントの関係についてはチュートリアルにも書いてあるけど、読んだ本にわかりやすい説明があった。
- 作者: 加藤政樹
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2013/02/28
- メディア: 大型本
- 購入: 3人 クリック: 16回
- この商品を含むブログ (7件) を見る
スクリプトにおいて
this → スクリプト自身
this.gameObject → スクリプトがアタッチしているGameObject
gameObject → this.gameObjectと同じ
みたいな感じ。
モデルやアニメーションなどのリソースに時間がかかりそうだなぁ…
AssetStoreつかってうまいことできないかなぁ。
まずは簡単なのでいいから一本作り上げたい。
なかなかゲームになりませんが、夜も更けてきたので今回はこの辺りで。
それでは、おやすみなさい。