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

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

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

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

Unity

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

Q&A

解決済

1回答

1890閲覧

孫オブジェクトにHingeJointをComponentする

qoooooo

総合スコア13

C#

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

Unity

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

0グッド

0クリップ

投稿2017/12/26 07:12

###前提・実現したいこと
UnityでC#を使ってスクリプトを書いています。
以下のコードでは、子オブジェクトにHingeJointをComponentしていますが、孫オブジェクトにComponentする場合、どのようにコードを変えればいいのかわかりません。
なるべく形式を変えずに孫オブジェクトを取得し、HingeJointをComponentさせる方法があれば、教えていただきたいです。

###該当のソースコード

C#

1using UnityEngine; 2using System.Collections; 3 4 5public class Alpha3 : MonoBehaviour 6{ 7 8 void Start() 9 { 10 int count = 0; 11 GameObject[] childObject = new GameObject[4]; 12 13 //Search child objects 14 foreach (Transform child in gameObject.transform) 15 { 16 childObject[count] = gameObject.transform.FindChild(child.name).gameObject; 17 count++; 18 19 } 20 21 AttachHingeJointA(childObject[0], childObject[1], childObject[2], childObject[3]); 22 23 } 24 25 26 public void AttachHingeJointA(GameObject block0, GameObject block1, GameObject block2, GameObject block3) 27 { 28 29 //Connect 0&1 30 HingeJoint hinge01 = block0.AddComponent<HingeJoint>(); 31 32 hinge01.anchor = new Vector3(-0.5f, 0.0f, 0.5f); 33 hinge01.axis = new Vector3(0.0f, 1.0f, 0.0f); 34 hinge01.connectedBody = block1.GetComponent<Rigidbody>(); 35 36 //Connect 1&2 37 HingeJoint hinge12 = block1.AddComponent<HingeJoint>(); 38 39 hinge12.anchor = new Vector3(0.5f, 0.0f, -0.5f); 40 hinge12.axis = new Vector3(0.0f, 1.0f, 0.0f); 41 hinge12.connectedBody = block2.GetComponent<Rigidbody>(); 42 43 //Connect 2&3 44 HingeJoint hinge23 = block2.AddComponent<HingeJoint>(); 45 46 hinge23.anchor = new Vector3(0.5f, 0.0f, -0.5f); 47 hinge23.axis = new Vector3(0.0f, 1.0f, 0.0f); 48 hinge23.connectedBody = block3.GetComponent<Rigidbody>(); 49 50 //Connect 3&0 51 HingeJoint hinge30 = block3.AddComponent<HingeJoint>(); 52 53 hinge30.anchor = new Vector3(-0.5f, 0.0f, 0.5f); 54 hinge30.axis = new Vector3(0.0f, 1.0f, 0.0f); 55 hinge30.connectedBody = block0.GetComponent<Rigidbody>(); 56 } 57 58 59}

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

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

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

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

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

guest

回答1

0

ベストアンサー

foreach (Transform 変数 in transform) { }とすると、変数に子オブジェクトがそのまま入ります。
色々パターンが考えられますが幾つか例を。

C#

1//子の子を取得する場合 2foreach (Transform child in gameObject.transform) { 3 foreach (Transform mago in child) { 4 childObject[count] = mago.gameObject; 5 count++; 6 } 7} 8 9//孫の名前がいずれも同じ"mago"の場合 10foreach (Transform child in gameObject.transform) { 11 childObject[count] = child.Find("mago").gameObject; 12 count++; 13} 14 15//子の名前が"Obj1"、"Obj2"...と連番で、孫の名前がいずれも同じ"mago"の場合(パスも使えるという例) 16for (int i = 0; i < childObject.Length; i++) { 17 childObject[i] = transform.Find("Obj"+i+"/mago").gameObject; 18 //transform.Find("Obj1/mago") →自分の子である"Obj1"の子である"mago"のtransformが返る 19}

投稿2017/12/26 13:32

sakura_hana

総合スコア11427

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

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

qoooooo

2017/12/27 03:18

とても助かりました! 何種類か例をくださり、本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問