🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

3回答

797閲覧

Unityでプレイヤーが消滅する

VersionGamePlay

総合スコア9

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/10/11 11:36

前提・実現したいこと

BulletPrefabがRockPrefabに当たった時お互いを消滅させる処理を行う

発生している問題・エラーメッセージ

スペースキー(BulletPrefabの生成キー)を押すとプレイヤー等のオブジェクトが消滅する
BulletPrefabの生成もできなくなる。

該当のソースコード

using System.Collections; using System.Collections.Generic; using UnityEngine; public class RainbowSword : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { transform.Translate (0, 0.4f, 0); if (transform.position.y > 10) { Destroy (gameObject); } } void OnTriggerEnter2D(Collider2D coll) { Destroy (coll.gameObject); Destroy (gameObject); } }

試したこと

スクリプトの見直しやいろいろなサイトを調べてスクリプトの変更

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

重ね重ね申し訳ありません…

スペースキー(BulletPrefabの生成キー)を押すとプレイヤー等のオブジェクトが消滅する
BulletPrefabの生成もできなくなる。

こちらも、プレイヤーコンローラーにスペースキーを押して、弾丸生成処理を入れてる場合、
先ほど申し上げた、自分の推測が正しいと、その「プレイヤー」自体がDestoryされるため、
プレイヤーコントローラーに紐づけた全ての処理も、当然ながら停止ます。

投稿2019/10/11 14:04

hermit19901127

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

VersionGamePlay

2019/10/12 13:52

ありがとうございました、解決しました
guest

0

今回、発行した弾丸が、即座に発動元のプレイヤーと当たり判定を起こし、質問のような挙動になってると思われますが、
プレイヤー以外でも、マップを構成する当たり判定のあるオブジェクトと弾丸が接触するたび、無差別に接触対象をDestoryしてしまう可能性が予想されます。

そこで「レイヤー」という概念を取り入れるのは、と提言いたします。
https://gomafrontier.com/unity/1189

投稿2019/10/11 13:58

hermit19901127

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ソースを見た限りの判断なのですが…考えうる原因としては

・RainbowSwordを生成する
・生成場所がプレイヤーの座標
・故にRainbowSword生成後、即座にプレイヤーとの当たり判定が走る
・OnTriggerEnter2Dの引数「coll」で渡される対象が「プレイヤー」
・「coll == プレイヤー」が「Destroy (coll.gameObject);」で消されてしまう

みたいな状態になってるように感じられます。

対策として考えるなら、

・OnTriggerEnter2Dで与えられたオブジェクトが「プレイヤー」である場合、if文でDestroyを行わないようにする

が、考えられます。

たしか、Unityのゲームオブジェクトには「タグ」で識別のための文字列が設定できたはずなので、
それを用いて対策をするのが手っ取り早いかと思います。

投稿2019/10/11 13:54

hermit19901127

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問