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

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

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

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

Unity

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

Q&A

解決済

1回答

4386閲覧

UnityのHingeJointをスクリプトを使ってAddComponentしたい

qoooooo

総合スコア13

C#

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

Unity

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

0グッド

0クリップ

投稿2017/12/22 08:15

編集2017/12/26 03:09

###質問内容
UnityのC#スクリプトで、親オブジェクトから子オブジェクトを全4つ取得し、その子オブジェクトにHinge JointをAddComponent したいのですが、HingeJointの設定がうまくいきません
どのように直せばうまく動くか教えていただけると助かります。

※追記
親オブジェクトも子オブジェクトもプレハブを用いています。親オブジェクトはEmptyで、子オブジェクト
はCubeです。CubeにはHingeJointのスクリプトの他に、力を加えるスクリプト(AddForce)をComponentしています。

###発生している問題・エラーメッセージ
Assets/Script/Alpha.cs(34,16): error CS1061: Type UnityEngine.HingeJoint' does not contain a definition for Anchor' and no extension method Anchor' of type UnityEngine.HingeJoint' could be found (are you missing a using directive or an assembly reference?)

Assets/Script/Alpha.cs(35,16): error CS1061: Type UnityEngine.HingeJoint' does not contain a definition for Axis' and no extension method Axis' of type UnityEngine.HingeJoint' could be found (are you missing a using directive or an assembly reference?)

Assets/Script/Alpha.cs(36,16): error CS1061: Type UnityEngine.HingeJoint' does not contain a definition for ConnectedBody' and no extension method ConnectedBody' of type UnityEngine.HingeJoint' could be found (are you missing a using directive or an assembly reference?)

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

using UnityEngine;
using System.Collections;

public class Alpha : 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++; } AttachHingeJoint(childObject[0], childObject[1], childObject[2], childObject[3]); } public void AttachHingeJoint(GameObject block0, GameObject block1, GameObject block2, GameObject block3) { //Connect 1&0 block1.AddComponent<HingeJoint>(); HingeJoint Hinge1 = block1.GetComponent<Rigidbody>().GetComponent<HingeJoint>(); block1.GetComponent<Rigidbody>(); Hinge1.Anchor = new Vector3(0.5f, 0.0f, 0.5f); Hinge1.Axis = new Vector3(0.0f, 1.0f, 0.0f); Hinge1.ConnectedBody = block0.GetComponent<Rigidbody>(); }

}

###試したこと
エラーは
Hinge1.Anchor = new Vector3(0.5f, 0.0f, 0.5f);
Hinge1.Axis = new Vector3(0.0f, 1.0f, 0.0f);
Hinge1.ConnectedBody = block0.GetComponent<Rigidbody>();
の3行です。
子オブジェクトの呼び出しがうまくいっていないのかと思い、printさせたら、取得はできているみたいでした。
また、HingeJointをAddComponentするだけのクラスを作ってみましたが、そちらもエラーが出ませんでした。
子オブジェクトの呼び出し+HingeJointの組み合わせが悪いのでしょうか?

###補足情報(言語/FW/ツール等のバージョンなど)
Unityのバージョンは5.3.7、エディターはVisual Studio Community 2017 for Macを使用しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

Hinge1.anchor = new Vector3(0.5f, 0.0f, 0.5f);
Hinge1.axis = new Vector3(0.0f, 1.0f, 0.0f);
Hinge1.connectedBody = block0.GetComponent<Rigidbody>();
と、いずれも頭文字は小文字です。(大文字小文字区別します)
Unity - スクリプトリファレンス: HingeJoint

それはそれとして、AddComponentは追加したコンポーネント(インスタンス)をそのまま返すので
HingeJoint Hinge1 = block1.AddComponent<HingeJoint>();
と1行で書けます。(その後のblock1.GetComponent<Rigidbody>();は何もしていないので消してよいかと思います)

投稿2017/12/22 08:22

sakura_hana

総合スコア11425

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

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

qoooooo

2017/12/22 08:26

ありがとうございます!早速変更してみましたが、エラーメッセージに変わりはありませんでした。 他の部分でつまずいているようです( ; ; )
sakura_hana

2017/12/22 08:32

こちらでは正常に動作しました。 スクリプトの更新が保存できていないとか、反映待ち中に動作させてしまったとかはないですか?
qoooooo

2017/12/22 09:34

Unityのバージョンでしょうか、、保存もしていますし、反映もされていると思います。
qoooooo

2017/12/26 07:47

教えていただいた書き方に変更し、1度Unityを終了させたら動作しました!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問