質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

解決済

Unity 3D 当たり判定しているオブジェクトが消去されたときに、当たっていたオブジェクトも消去したい

911RSR
911RSR

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

2回答

0評価

0クリップ

460閲覧

投稿2021/04/15 17:06

編集2022/01/12 10:58

Unity3Dでゲーム開発をしております。

マウスで画面上クリックしたところに、クリックしたところがケーキの上であった場合にたこ焼きが生成されます。
(おいしそうでなくてすみません。)

たこ焼きが100個乗っかった時に、ケーキが消えるようにしました。

ここで100個のたこ焼きも消えるようにしたいのですが、なかなか良いスクリプトが書けません。

https://gametukurikata.com/ui/countdownhp
このページを参考に、ダメージを食らってHPが0になったらケーキは消えます。

このたこ焼きにテクスチャを張り付けており、埋め込めば埋め込むほどケーキの中身が見えるようになっています。
(複雑になりすぎるのでそのスクリプトは省略します)

C#

using UnityEngine; using System.Collections; public class TakoyakiMaker : MonoBehaviour { void OnTriggerEnter(Collider col) { if (col.tag == "Cake") { if (col.GetComponent<EnemyController>() != null) { col.gameObject.GetComponent<EnemyController>().TakeDamage(10); } } } }

C#

using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.SceneManagement; namespace CountDownHP { public class EnemyStatus : MonoBehaviour { // HP [SerializeField] public int hp = 10000; [SerializeField] public int hptodisappear = 3000; // HPを一度減らしてからの経過時間 private float countTime = 0f; // 次にHPを減らすまでの時間 [SerializeField] private float nextCountTime = 0f; // HP表示テキスト private Text hpText; // 現在のダメージ量 private int damage = 0; void Start() { hpText = GetComponentInChildren<Text>(); hpText.text = hp.ToString(); } void Update() { // ダメージなければ何もしない if (damage == 0) { return; } // 次に減らす時間がきたら if (countTime >= nextCountTime) { // ダメージ量を10で割った商をHPから減らす var tempDamage = damage / 10; // 商が0になったら余りを減らす if (tempDamage == 0) { tempDamage = damage % 10; } hp -= tempDamage; hpText.text = hp.ToString(); damage -= tempDamage; countTime = 0f; // HPがx以下になったら敵を削除 if (hp <= hptodisappear) { gameObject.SetActive(false); } } countTime += Time.deltaTime; } // ダメージ値を追加するメソッド public void SetDamage(int damage) { this.damage += damage; countTime = 0f; } public void onTriggerEnter (Collider col) { if (col.gameObject.tag == "W") { if (hp <= hptodisappear) { Destroy(col.gameObject); } } } } }

最も簡単なのは、一つ目のスクリプトでダメージを食らわせた後にDestroy (gameObject)することなのですが、これではケーキの中身を見せる前に消えてしまい、この方法ではいけません。

上記の二つ目のスクリプトの最下部で、hpが0以下になった時に、このスクリプトがアタッチされたケーキに当たり判定を起こしているたこ焼きをデストロイしようと試みましたが、おそらくそれより上部のvoid updateでのsetactive falseが先に処理される関係でたこ焼きが消えません。。

何か良いアイデアがないか、ご教示よろしくお願い致します。### ヘディングのテキスト

EnemyStatusコンポーネントのHp

4/17追記

たこ焼きプレハブにアタッチするスクリプト上で、ケーキに埋め込まれたたこ焼きリストを作成し、ケーキが消えた時(activeSelf ==false)からリスト内容の消去を試みました。

コンパイル上はエラーメッセージはないのですが、やはりたこ焼きが消えてくれません。。
どこか改善点をご教示頂けますと幸甚です。

c#

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Cleaner : MonoBehaviour { List<GameObject> takoyakiList = new List<GameObject>(); // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { } void OnTriggerEnter(Collider col) { if (col.tag == "Goodcake") { takoyakiList.Add(gameObject); //ケーキが消えた時:ここがおかしい可能性が高い??? if (col.gameObject.activeSelf == false) { foreach (GameObject t in takoyakiList) { Destroy(t); } } } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。