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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

3回答

9881閲覧

子オブジェクトのコンポーネントを取得したいのですがうまくいきません

neko990

総合スコア23

C#

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

Unity3D

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

Unity

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

0グッド

1クリップ

投稿2017/05/23 07:43

編集2017/05/23 08:20

子オブジェクトのコンポーネントを取得したいのですがうまくいきません

unityで敵オブジェクトに武器(enemyattack)を持たせてその武器に当たったらプレイヤーオブジェクトが持つint値Playerattackに武器の攻撃力が代入されてプレイヤーがもつint値HPにPlayerattackに代入された攻撃力の値に応じてHPの値が引かれていくというシンプルなコードを書いているのですが、武器オブジェクトを親にすれば以下のコードでうまく動作したのですが

プレイヤー側のスクリプトです↓↓この部分のコードは武器オブジェクトが親のままならうまくいきました。
Playerattack = GameObject.Find("武器の名前").GetComponent<武器のスクリプト名>().enemyattack;
HP = HP - Playerattack;

武器側のスクリプトです

public int enemyattack;
// Use this for initialization
void Start()
{

} // Update is called once per frame void Update() { } void OnTriggerEnter(Collider col) { if (col.gameObject.tag == "Player") { enemyattack = Random.Range(1, 20); } }

武器オブジェクトを敵オブジェクトの子に設定したので以下の3つのコードに書き直して動作させたのですがどれもうまくプレイヤー側で受け取ることができません。

下記のスクリプトはプレイヤー側に持たせたのですがどれもうまくPlayerattackの値にenemyattackの値を代入することができませんでした。

Playerattack = gameObject.transform.Find("武器の名前").GetComponent<武器のスクリプト名>().enemyattack;
Playerattack =transform.Find("武器の名前").GetComponent<武器のスクリプト名>().enemyattack;
Playerattack = transform.FindChild("武器の名前").GetComponent<武器のスクリプト名>().enemyattack;

何かよい方法はないでしょうか?

記述不足で申し訳ありません....

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

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

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

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

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

Bongo

2017/05/23 08:02

お伺いしますが、これらコードが記述されているスクリプトはプレイヤーオブジェクトと敵オブジェクトのいずれにアタッチされているのでしょうか?
neko990

2017/05/23 08:21

記述不足で申し訳ありません....一応質問文章を修正しました!!
guest

回答3

0

自己解決

何とか自己解決できました!皆さんありがとうございます!

投稿2017/05/30 09:46

neko990

総合スコア23

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

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

0

おそらく、一番最後に列挙してある失敗例というのは、プレイヤーオブジェクトの子の中から武器オブジェクトを探そうとしているためうまくいかないのかな、と思います(武器オブジェクトを持っているのはプレイヤーオブジェクトではなく敵オブジェクト、でよろしかったですよね?)。
GameObject.Findは、引数としてスラッシュ区切りの文字列を与えると階層を辿ってオブジェクトを探してくれるようですので、これを試してみてもいいかもしれません。

投稿2017/05/23 08:52

Bongo

総合スコア10807

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

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

neko990

2017/05/23 12:48

なるほど、了解しました!!もう少し試してみます!
guest

0

武器のスクリプトは、その階層の中でひとつだけですか?
もしひとつだけであれば、 GetComponentInChildren<武器スクリプト>() で参照を得るのが一番早いかなと思います。

投稿2017/05/23 08:20

edo_m18

総合スコア2283

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

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

neko990

2017/05/23 08:28

武器スクリプト自体はひとつだけなのですがGetComponentInChildren<武器スクリプト>()でもうまくいきません....すいません....
edo_m18

2017/05/23 08:34

「うまくいかない」というのは、具体的にどういう状況ですか?
neko990

2017/05/23 08:39

GetComponentInChildren<武器スクリプト>()を書いてもPlayerattackの値に変化がない状態です。 Playerattack = GameObject.Find("武器の名前").GetComponent<武器のスクリプト名>().enemyattack; HP = HP - Playerattack; 武器オブジェクトが親の状態なら上記のコードでPlayerattackの値にenemyattackの値が代入されてたのですが、子にすると上記のコードでもGetComponentInChildren<武器スクリプト>()と書いてもPlayerattackの値に何も入らない状態のままです。 説明が下手で申し訳ありません...
edo_m18

2017/05/23 08:41

なるほど。なにかエラーは出ていますか? エラーが出てないのだとしたら、そもそも「enemyattack」に値は設定されていますか?
neko990

2017/05/23 08:56

エラーは今のところ確認できてない状態です、enemyattackはpublic int enemyattack; と書いており、enemyattackの値事態には何も設定してない状態であります。しかしenemyattackの値は武器オブジェクトがプレイヤーオブジェクトに当たるたびに1から19の値にランダムに代入されているのを確認できています。 やはりプレイヤースクリプトの書き方がおかしいのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問