unity prefab 削除 10

この記事はUnity Advent Calendar 2018の5日目の記事です。 この記事でのバージョン Unity 2018.2.2f1 はじめに Unityは画像や音源をそのまま使っているわけでないので、PC上のアセット(ファイル)のサイズとアプリに含まれるアセットのサイズが異なっていたり、プロジェクトに入ってる… UnityではGameObject(ゲームオブジェクト)を生成するだけではなく、作ったGameObjectを削除したいことも多々あります。, 開発中にHierarchy(ヒエラルキー)ウィンドウからGameObjectを削除することもありますし、ゲームの実行中に動的にGameObjectを削除することもあります。, このページでは画面上で削除する方法と、スクリプトから削除する方法の両方について紹介します。また、オブジェクトの生成、削除を行う時の注意点についても記載してあるので、もし余裕があればこの点も意識してみるとひとつレベルアップした開発者になれます。, もしオブジェクトの生成(Instantiate)についても興味があれば、このブログでも解説を行っているのでこちらも参考までに。, ひとつは開発中にシーン内のオブジェクトが不要になった時です。不要なオブジェクトがシーン内にあるとその分メモリを使用してしまうことになるので、不要なGameObjectは削除しておくことで負荷を減らせます。また、Hierarchy(ヒエラルキー)ウィンドウが整理できるという点も開発をスムーズに進めるために役立ちます。, もうひとつはゲームの実行中にオブジェクトが不要になった時です。例えばシューティングゲームなどで主人公が撃った弾のGameObjectが生成されるとしましょう。この時、遠くに飛んで行った弾はゲームプレイに影響を及ぼしませんが、オブジェクトが存在している限りはメモリ等のリソースが使われるのでなるべく減らしたいところです。, ヒエラルキーウィンドウで不要になったGameObjectをクリックし、右クリックまたは二本指タップでメニューを開き、[Delete] を選択します。, ショートカットキーだとWindowsなら [Ctrl] + [delete] 、Macなら [command] + [delete] で削除できます。, スクリプトからGameObjectを削除する方法についても紹介します。どちらかというとこちらがメインな気もします。, このスクリプトでは、インスペクターウィンドウでセットしたGameObjectをStart()のタイミングで削除(破棄)しています。, スクリプトからオブジェクトを削除する場合はDestroy()メソッドを使います。Destroy()メソッドの引数としてGameObjectを渡せばそのGameObjectが削除されますし、コンポーネントへの参照を渡せばそのコンポーネントが削除されます。, 試しに『Plane』オブジェクトの上に『Sphere』オブジェクトを配置してみます。『ObjectDestroyer』のスクリプトをアタッチするためのオブジェクトである『ObjectDestroyer』オブジェクト(そのまんま)を作成し、削除対象のGameObjectとして『Sphere』オブジェクトを指定してあります。, よくあるうっかりさんケースとしては、このスクリプトがアタッチされているGameObjectを削除したいと思って以下のように書いちゃうケース。これだとスクリプトだけがGameObjectから削除されてGameObjectはそのまま残ってしまいます。これではいけませんね。, 自分自身のGameObjectを削除したい場合は「gameObject」を指定しましょ。小文字で書かれている「gameObject」はこのスクリプトがアタッチされているGameObjectを意味します。, また、以下のようにfloat型で秒数を渡すことで指定秒数後に削除することもできます。例えば削除対象のGameObjectで消える時の効果音を再生して、その再生秒数だけ待った後にオブジェクト削除する、なんて使い方ができます。, サンプルとして、コライダーに当たったらゲームオブジェクトを削除するスクリプトを作ってみます。, OnCollisionEnter()のメソッドは、このスクリプトがアタッチされているGameObjectのコライダーが他のコライダーと衝突したときに呼ばれます。例えばこのスクリプトを平面(Plane)オブジェクトにアタッチしたとしたら、空から落ちてきた別のオブジェクトが地面に落ちたときに呼ばれます。, 引数の「other」は衝突相手の情報が渡されます。「other.gameObject」のように衝突相手のGameObjectを取得することもできるので、今回はこの方法でGameObjectを取得してDestroy()で闇の彼方に消え去ってもらいます。, シーンでは以下のようにオブジェクトを配置しています。画面下にある『Plane』オブジェクトに『ObjectEraser』のスクリプトをアタッチしています。黄色い『Sphere』オブジェクトには『Rigidbody』コンポーネントをアタッチしてあるので、ゲームを開始すると重力に引かれて『Plane』オブジェクトに向かって落ちていきます。, ゲームを開始すると、以下のように衝突したときに『Sphere』オブジェクトが削除されます。, たくさんのオブジェクトがある場合でも、『Plane』オブジェクトに衝突すると削除されます。, ステージの外側にこうした衝突を検知するオブジェクトを用意しておくことで、冒頭で少し触れた主人公が撃った弾が遠くに行ったらオブジェクトを削除する、みたいなことができます。, また、このスクリプトでは衝突相手が誰であろうと削除していますが、実際に使う場合は以下のように衝突相手のタグが特定のタグであったら削除する、というようにすると親切です。例えばこの例では衝突相手のタグが「Bullet」(弾)だったら削除しています。, GameObjectを削除すると、そのGameObjectにアタッチされているコンポーネントについても一緒に削除されます。GameObjectはコンポーネントの入れ物なのでこれはその通りなのですが、もし他のスクリプトで削除対象のGameObjectにアタッチされているコンポーネントにアクセスするとエラーが出るので注意が必要です。, 例えば、あるスクリプトから別のオブジェクトのRigidbodyを参照していたとします。対象のオブジェクトが削除されるとRigidbodyへの参照もnullになるので、操作しようとしてエラーが発生することがあります。, この場合はnullチェックを行うなどの対策が必要です。nullチェックについては以下の記事もご参照ください。, また、Destroy()を呼んだとしても、実はそのフレーム内ではまだオブジェクトが生きているのでアクセスできちゃうんですよね。オブジェクトが削除されるのはフレームが更新された後、つまり呼び出したフレームの処理が全て完了したタイミングなので、別のスクリプトでオブジェクトの数をカウントするなどの処理を入れている場合は注意が必要です。, フレーム内の処理中であっても呼び出した瞬間に削除するDestroyImmediate()のメソッドもありますが、こちらはマニュアルでも非推奨の扱いになっています。この辺に「すぐ削除した方がいいじゃん!」とDestroyImmediate()を使って痛い目を見た人がいるらしいですよ?(1敗), Editorスクリプトを書く場合には、フレーム終了時にオブジェクトを削除するというDestroy()の動きが使えないため、DestroyImmediate()を使います。なので、ゲーム実行中にDestroyImmediate()を使うのはあまりお勧めできません。, 「Immediate(すぐに)」の文字につられて使うと大変なので、大人しくマニュアルの「Destroy()の使用を強く推奨します」の言葉に従いましょう(笑), これはパフォーマンスを考え始める中級者以上の方に注意して欲しい点ですが、オブジェクトの生成や削除の処理はちょっと重い処理だったりします。, Instantiate()を使ってオブジェクトを生成して、Destroy()を使ってオブジェクトを削除する、という流れはオブジェクトの数が少ない場合にはそこまで影響はありませんが、オブジェクトの数が多くなるほどパフォーマンスへの影響が出てきます。, この場合は、SetActive()のメソッドを使ってオブジェクトを非表示にしてプールしておくのもひとつの手です。オブジェクトをプールすること(プーリング)についても調べておくと開発者としてレベルアップできます。, GameObjectを削除する方法として2通りの方法を紹介しました。ひとつはヒエラルキーウィンドウから手動で削除する方法、もうひとつはスクリプトから削除する方法です。, ゲームの実行中にGameObjectを削除したい場合はスクリプトから削除することになるので、Destroy()メソッドの使い方を覚えておくと便利です。, 生成についてもこのブログで紹介しているので、よかったらこちらも合わせてご覧くださいな。, そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。, ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!.

はじめに Unity 2018 時代はHierarchyのプレハブを解除する機能はなく、別なプレハブとして再登録した後プレハブ削除など面倒な手順を強いられていましたが、最近の Unity はプレハブ周りが改善されて解除も一発になりました。 方法 Hierarchy上で解除したいプレハブのコンテキストメニューから 気軽に遊べるスマートフォン向けアプリです。ボクセルアートで彩られるどこかレトロ、でも新しい世界で癒されてみませんか? Splatoon最高記録:世界6位(リグマペア)

歴史年表 作成 アプリ 11, キルヒホッフの法則 過去 問 5, ドラクエ10 5ch メイヴ 21, まし ゆるむ パワプロ 9, アルベルト スポーク折れ た 4, タロット 死神 夫婦 4, 看護学生 インターン リュック 7, かぎ針編み 長編み 円 4, Drop Table ワイルドカード 4, ドルマイシン軟膏 肉芽 爪 9, 食塩水 濃度 比 9, 歴史年表 作成 アプリ 11, 建具 記号 ガラス 6, J10a W10pbk 取扱説明書 10, 日本刀 重さ 平均 5, 職場 年上女性 好き 7, 卵巣嚢腫 術後 生理遅れる 11, オラ プレックス ビビリ毛 8, ダイハツ ムーヴ ドライブレコーダー 取り付け リア 10, 横浜 ニュース 火事 8, ときめき草 歌詞 意味 5, 消費 消化 違い 13, アメリカ ビザ 面接後 5, ソナチネ ピアノ レベル 9, キャリー デフ ミッドシール交換 16,