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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Unity

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

Q&A

解決済

1回答

7809閲覧

当たったそのColliderのもつ変数を取得したい

Ak11

総合スコア15

Unity

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

0グッド

0クリップ

投稿2019/08/28 07:23

2Dでプレイヤーが球に当たりダメージを受けるという場面を再現しようとしています。そこでコライダーを用いて

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Ball : MonoBehaviour 6{ 7 float PlayerHP, Damage; 8 9 public void OnTriggerEnter2D(Collider2D col) { 10 if(col.gameObject.name == "Player"){ 11 PlayerHP -= Damage; 12 } 13 } 14 15} 16

とできますが、 このHPをプレイヤーが取得する際、プレイヤーのスクリプトにFindを扱う必要がでてきます。オブジェクトがこの二者のみならそれでよいのですが、ダメージを与えるボールの種類が増えていくと、プレイヤースクリプトに各々のボールを取得するためのコードを書くのは面倒です。そこでそれぞれが算出したHPをプレイヤーに送るか、タグを用いて当たったそのボールのコライダーのもつDamageを取得できればよいのですが、やり方が分かりません。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ダメージを与えるメソッドと、ダメージを受けるメソッドをそれぞれ用意してあげて、それらはオブジェクト自身が自分で面倒を見るようにすると良いかと思います。

プレイヤー側(ダメージを受けるメソッドだけ実装)

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Player : MonoBehaviour 6{ 7 int myHealth = 20; 8 9 public void Damage(int damage) { 10 myHealth -= damage; 11 Debug.Log(damage+" ダメージを受けてHPが "+myHealth+" になった!"); 12 } 13}

ボール側(ダメージを与える側)

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class DamageTest : MonoBehaviour { 6 void OnCollisionEnter2D(Collision2D collision) { 7 if (collision.gameObject.GetComponent<Player>()) { 8 collision.gameObject.GetComponent<Player>().Damage(1); 9 } 10 } 11}

collision.gameObject.GetComponent<Player>()でPlayerスクリプトがアタッチされているかを調べています。trueであればアタッチされている、つまりダメージを受けるオブジェクトであることがわかります。
なので、相手のダメージを受けるメソッドに与えるダメージを引数で渡します。

投稿2019/08/28 07:36

編集2019/08/28 07:38
hogefugapiyo

総合スコア3302

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

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

Ak11

2019/08/28 08:04

参考になりました。ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問