【Unity初心者 ゲーム開発メモ】エフェクト発生、削除のメモ その2
こんにちわわ
外出自粛申請が解除されて二日目ですが、みなさんどのようにお過ごしでしょうか?
ボクはというと、『ぐらんぶる』と『その着せ替え人形は恋をする』の新刊が発売したので、それを読みつつ、『オーバーロード』を見始めたので見つつ、ときどきUnityの勉強をしております。※ほぼ遊んでるやんけ(怒)
ぐらんぶるはなんか実写化する見たいですね。大学生の日常?(あれが日常はちとやばい)を描く作品なので、笑いあり、青春ありの映画になりそうですね。
その着せ替え人形は恋をするはコスプレ大好き少女とひな人形作り師を目指す少年が互いに支えあって自分に正直に好きなことを全力で楽しみながら青春を謳歌する恋愛ストーリーものです。4月は君の嘘や、ランウェイで笑ってなどが好きな方にはドはまりする作品だと思います。
下記にリンク貼っておくので、よかったらぜひ読んでみてください!
ぐらんぶるは2020年5月26日更新時点では、1~3巻まで試し読みができます。
雑談はさておき、早速本題に入りたいと思います。
その2の前にその1に目を通してもらえると何が違うのかがわかるかと思います。
エフェクトの発生、削除 その2
なんやねん!前回のメモと同じじゃねーか!と思われた方。マジすみません。
あの後、敵オブジェクトも爆発させたるか!と思って同じような処理を敵オブジェクトにも実装していたのですが、ちょっとだけメモしときたいことがあったため、今回その2ということで記事にしました。
テーマとして、オブジェクトを削除する際に、『オブジェクト名を指定して消す』か『オブジェクトタグを指定して消す』かで少しだけInspectorの設定、スクリプトが変わるため、メモしようとおもいました。
敵Prefabを準備
ボクは下記のMonsterオブジェクトを使用しております。
ダウンロードしたオブジェクトを適当な位置に配置してください。
Enemyスクリプトを作成
前回の記事で書いたPlayer.csとほとんど変わりません。
では書いてきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
using UnityEngine; using UnityEngine.UI; public class Enemy : MonoBehaviour { //Enemyを入れる箱 public GameObject turtle; //破壊されたエフェクトを入れる public GameObject breakEffect; // Start is called before the first frame update void Start() { //Enemyタグを取得 turtle = GameObject.FindGameObjectWithTag("Enemy"); //BigExplosion 1を取得 //ProjectからPrefabを生成する場合、下記は不要。記載してるとPrefabがないというエラーがでます。 //breakEffect = GameObject.Find("BigExplosion 1"); } //Collisionを使うと衝突判定になる ※Triggerはすり抜け判定 isTriggerが必要になる。 //isTriggerがtrueになるとフィールドのオブジェクトもすり抜けるため、今回衝突判定で対応 private void OnCollisionEnter(Collision col) { //Destroy時のエフェクトを実行。ここでProjectのPrefabを生成します。 GameObject effect = Instantiate(breakEffect) as GameObject; //エフェクトが発生する場所を決定する(unitychanオブジェクトの場所) effect.transform.position = turtle.transform.position; Destroy(turtle, 0.0f); } } |
ここで注意ですが、初心者の方やUnityに慣れていない方の場合、18~20行目にあるように、GameObject.Find(オブジェクト名)でオブジェクトを取得しようとするかもしれません。
ですが、今回は『Hierarchy内にオブジェクトがない』ので、ここでGameObject.Find(オブジェクト名)で取得して、エフェクトを生成しようとすると、下記のようなScene内にオブジェクトが存在しませんというエラーが発生します。
エラー:
ArgumentException: The Object you want to instantiate is null.
Hierarchyに配置していないPrefabやファイルパス指定してオブジェクトを生成する際に、対象のPrefabが存在しない場合に『オブジェクトがないですよ』という意味のエラーだそうです。
分かれば当たり前のことですが、記載ミスでつまずくと結構めんどくさいので念のため。
また、今回はEnemyをタグで取得するため、以下注意してください。
タグを取得(今回)
turtle = GameObject.FindGameObjectWithTag(“Enemy”);
名前で取得(その1でPlayerを取得したパターン)
unitychan = GameObject.Find(“unitychan”);
スクリプトをオブジェクトに追加
こちらはエネミーオブジェクトに『Enemy.cs』を追加していきます。
各変数には、画像のように追加してください。
また、敵オブジェクトにColliderやRigitBodyが追加されていない場合はこちらも忘れずに追加してください。
上記の処理まで完了したら、Playerと敵オブジェクトをぶつけてみてください。
おそらく両者痛み分けのごとく二つともオブジェクトが消し飛ぶと思います。
本来であれば、HPを設定してHPが0になったらオブジェクトを消せるようにしたいのですが、今回はここまでとします。
それではお疲れさまでした!!
ディスカッション
コメント一覧
まだ、コメントがありません