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

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

ただいまの
回答率

91.04%

  • C#

    5543questions

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

  • Unity

    2802questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 97

qoooooo

score 5

前提・実現したいこと

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

該当のソースコード

using UnityEngine;
using System.Collections;


public class Alpha3 : MonoBehaviour
{

    void Start()
    {
        int count = 0;
        GameObject[] childObject = new GameObject[4];

        //Search child objects
        foreach (Transform child in gameObject.transform)
        {
            childObject[count] = gameObject.transform.FindChild(child.name).gameObject;
            count++;

        }

        AttachHingeJointA(childObject[0], childObject[1], childObject[2], childObject[3]);

    }


    public void AttachHingeJointA(GameObject block0, GameObject block1, GameObject block2, GameObject block3)
    {

        //Connect 0&1
        HingeJoint hinge01 = block0.AddComponent<HingeJoint>();

        hinge01.anchor = new Vector3(-0.5f, 0.0f, 0.5f);
        hinge01.axis = new Vector3(0.0f, 1.0f, 0.0f);
        hinge01.connectedBody = block1.GetComponent<Rigidbody>();

        //Connect 1&2
        HingeJoint hinge12 = block1.AddComponent<HingeJoint>();

        hinge12.anchor = new Vector3(0.5f, 0.0f, -0.5f);
        hinge12.axis = new Vector3(0.0f, 1.0f, 0.0f);
        hinge12.connectedBody = block2.GetComponent<Rigidbody>();

        //Connect 2&3
        HingeJoint hinge23 = block2.AddComponent<HingeJoint>();

        hinge23.anchor = new Vector3(0.5f, 0.0f, -0.5f);
        hinge23.axis = new Vector3(0.0f, 1.0f, 0.0f);
        hinge23.connectedBody = block3.GetComponent<Rigidbody>();

        //Connect 3&0
        HingeJoint hinge30 = block3.AddComponent<HingeJoint>();

        hinge30.anchor = new Vector3(-0.5f, 0.0f, 0.5f);
        hinge30.axis = new Vector3(0.0f, 1.0f, 0.0f);
        hinge30.connectedBody = block0.GetComponent<Rigidbody>();
    }


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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

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

//子の子を取得する場合
foreach (Transform child in gameObject.transform) {
    foreach (Transform mago in child) {
        childObject[count] = mago.gameObject;
        count++;
    }
}

//孫の名前がいずれも同じ"mago"の場合
foreach (Transform child in gameObject.transform) {
    childObject[count] = child.Find("mago").gameObject;
    count++;
}

//子の名前が"Obj1"、"Obj2"...と連番で、孫の名前がいずれも同じ"mago"の場合(パスも使えるという例)
for (int i = 0; i < childObject.Length; i++) {
    childObject[i] = transform.Find("Obj"+i+"/mago").gameObject;
    //transform.Find("Obj1/mago") →自分の子である"Obj1"の子である"mago"のtransformが返る
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/27 12:18

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

    キャンセル

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

  • ただいまの回答率 91.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    [初心者]UnityでFPSを作っています。

    前提・実現したいこと unityでFPSを作っています、今銃から弾を発射するscriptで悩んでいます。 発生している問題・エラーメッセージ scriptを作成後bull

  • 解決済

    Unityでベルトコンベア作りたい

    前提・実現したいこと Unityでベルトコンベア上を走り障害物を躱してゴールを目指すゲーム 発生している問題・エラーメッセージ ベルトコンベア上の物体(障害物・Playe

  • 解決済

    UnityのAddForceについて

    前提・実現したいこと アニメーションイベントより以下の関数を実行しbulletPrefabをプレイヤーに向けて一定距離飛ばしたいのですが以下の関数だと弾は生成されるのですが生成さ

  • 解決済

    衝突判定の複数感知

    Unityで衝突判定をするときに OnTriggerStay(Collider col) を使っています。 しかし,この関数では一つのオブジェクト(Collider)との衝突しか

  • 解決済

    UI Imageをスクリプトで動的に生成する方法。

    前提・実現したいこと 下図のように、GameObjectにアタッチしているスクリプトファイルから、 backgaugeImageという名前のUI Imageを動的に生成したいと

  • 解決済

    イベントハンドラを別のオブジェクトにアタッチしているスクリプトで書く方法。

    前提・実現したいこと 通常、CubeのOnCollisionEnter( )の処理を書きたい場合、そのCubeにアタッチしているスクリプトファイルでOnCollisionEnte

  • 解決済

    transform.Findでオブジェクトを取得できない

    私の他の質問と同じ内容に関する内容ですが、問題が絞れてきたので、再度質問させて頂きます。 発生している問題・エラーメッセージ カメラに割り当てたスクリプトで、カメラのz座標

  • 解決済

    自キャラが向いてる方向に攻撃をしたい

    3Dゲームの自機にビームの様な攻撃をしたいのですが真っすぐ(Z軸)にしか弾が飛んでいきません。 自機が向いてる方向に攻撃を行うにはどの様なコードを記述すればいいのか教えて頂きたいで

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

  • C#

    5543questions

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

  • Unity

    2802questions

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