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

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

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

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

Unity

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

Q&A

解決済

1回答

4236閲覧

Unity ParentConstraintの制約設定のソースをスクリプトから追加する。

Midget2

総合スコア34

C#

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

Unity

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

0グッド

0クリップ

投稿2018/11/26 06:55

編集2018/11/27 06:34

Unity(2018)の2Dで開発をしております。
ParentConstraintのスクリプトでの制御で行き詰ってしまいました。

やりたいことは以下の通りです。
①追従の基となるオブジェクトAをプレハブより生成する(Aにはaという子が付いている)。
GameObject ObjA = (GameObject)Instantiate (A, Position, Quaternion.identity);

②追従するオブジェクトBをプレハブより生成する。(Bは生成される前からParentConstraint(親子制約)のコンポーネントを持っている)
GameObject ObjB = (GameObject)Instantiate (B, Position, Quaternion.identity);

③BをオブジェクトCの子にする。
ObjB.transform.parent = ObjC.transform;

④BのParentConstraint(親子制約)の制約設定のソースにaを代入
ここがわかりません!

①~③までは何とか乗り越えることができたのですが,④がうまくいきません。
画像の赤く囲った部分にスクリプト上で宣言したいのですがその方法を教えて下さい。
イメージ説明

以下のサイトを参考にしたのですが理解ができませんでした。
https://qiita.com/Akematty/items/04fadac40f7ea45fd5ab

④のところで,自分でやってみたのは,

//オブジェクトBのParentConstraintコンポーネントを取得
ParentConstraint myParentConstraint = ObjB.GetComponent<ParentConstraint>();
//ソースを宣言
ConstraintSource myConstraintSource;
//sourceTransformをオブジェクトAのtransformを代入←ここでエラー
myConstraintSource.sourceTransform = ObjA.transform;
//オブジェクトBのParentConstrainにソースを追加←これもエラー
myParentConstraint.AddSource(myConstraintSource);

以上のようなことをやってみましたがエラーでした。
エラーの内容は次の通りです。

Assets/ConstraintScript.cs(34,4): error CS0165: Use of unassigned local variable `myConstraintSource'

リファレンスを見る限り,
ParentConstraint.AddSource(source)
となっているので,.AddSource(source)の括弧の中に入れるのはsource型?なのか…と思い,ソースの型を宣言。
.sourceTransformというのが,画像の赤四角で囲んだ部分だと思いオブジェクトAのtransformを代入しました。
しかしエラーが出ました…。このあたりが理解しきれていません。

そもそも,画像の赤四角で囲んだ部分の値をスクリプトから代入するのはAddSourceなのか…というのが1つの疑問です。
もし,AddSourceであるならば,そこに何を入れたらよいのかわからない…というのが2つ目の疑問です。

やってることが滅茶苦茶かもしれませんが,なにとぞよろしくお願いします。

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

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

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

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

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

sakura_hana

2018/11/26 07:37

「Unity ParentConstraintの制約設定のソースをスクリプトから追加」で検索してヒットするページの情報は確認済みでしょうか?
sakura_hana

2018/11/26 08:43

https://teratail.com/help/question-tips こちらを参考に、何をどう試して、何が分からないのか記載してください。(とりあえずコピペで動かしてみる→該当の部分を移植する、で出来るのではないかと思いますが)
Midget2

2018/11/26 12:57

もうしわけありません。加筆・修正いたしました。何卒よろしくお願いいたします。
sakura_hana

2018/11/27 02:44

謝らなくても大丈夫ですよー。コードを見る限り合っていそうな気がしますね……出たエラー文も載せてもらえますか? コードやエラー文は「```」で挟むと読みやすいのでそちらもお願いします。(質問するときのヒント3-3.表現するための言葉がわからない時は表現の仕方を工夫しましょう をご覧ください)
Midget2

2018/11/27 06:41

ありがとうございました!エラーコードで解決の糸口となりました!新たな謎も出てきましたが,乗り切ったということにしております。
guest

回答1

0

自己解決

エラーコードより,「初期化されていない変数」ということであったので,

ParentConstraint myParentConstraint;

ConstraintSource myConstraintSource;

原文では,この2つの宣言をメゾット内で行っていますが,
宣言を,メゾットの前に行ったところうまくいきました。

このメゾット以外でこの変数を使っていないので,メゾット内で良いかなと思っていたのですが…
ちょっとこのあたりの謎は解決していませんが,乗り切りました!

投稿2018/11/27 06:40

Midget2

総合スコア34

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

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

sakura_hana

2018/11/27 07:01 編集

解決して良かったです。冷静に考えればソースでも分かる内容でした。 `ConstraintSource myConstraintSource;` この行を `ConstraintSource myConstraintSource = new ConstraintSource();` こうするだけで、メソッド内宣言でも動くと思います。 (要は「変数は作ったけど中身が入ってない」→「その後中身にアクセスしようとしてるからエラーになる」ので、newで中身を入れてやる)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問