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

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

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

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

Unity

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

Q&A

解決済

1回答

1549閲覧

transform.position 直接変更

tokita

総合スコア11

C#

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

Unity

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

0グッド

0クリップ

投稿2016/12/05 09:49

編集2016/12/27 10:18

開発環境:unity5,c#

やりたいことは、Arrowオブジェクトとは別のオブジェクトから、
xを押したときにArrowオブジェクトの位置を変更するというものです。

====================================
//Arrowオブジェクトを見つけ、位置取得
Vector3 Ax = GameObject.Find("Arrow").transform.position;

//Xを押したら実行 if (Input.GetKeyDown("x")) {

//Ax.xの初期値は-3

Debug.Log(Ax.x); //↓記述 Ax += new Vector3(2,0,0); if(Ax.x == 5) { Ax.x = -3; } }

====================================
xを押したときのDebug.Log(Ax.x)の出力結果
1回目:-3
2回目:-3
3回目:-3

Arrowオブジェクトの検索、位置の取得は上手くいくのですが、
その後の、ベルトルを加える作業がうまくいきませんでした。
なお、unity、c#の両方でエラーは出力されません。

何故上手くいかなかったのか分かる方ご教授お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Axの値を変更したあと、Arrowオブジェクトのtransformに値を代入していないので当然動きません。

コードが抜粋されてるので推測ですが、Update関数が呼ばれるたびにGameObject.Findtransformを使ってオブジェクトを取得していませんか?

obj.transform.positionobj.GetComponent<Transform>().positionと同義です。
GameObject.FindGetComponentはどちらも重たい処理なので、Start関数などであらかじめ変数にキャッシュしておきましょう。

C#

1 2private Transform arrowTf; 3 4void Start(){ 5 arrowTf = GameObject.Find("Arrow").transform; 6}

C#

1Vector3 Ax = arrowTf.position; 2 3//Xを押したら実行 4if (Input.GetKeyDown("x")) 5{ 6 //Ax.xの初期値は-3 7 8 Debug.Log(Ax.x); //↓記述 9 10 Ax += new Vector3(2,0,0); 11 12 if(Ax.x == 5) 13 { 14 Ax.x = -3; 15 } 16 arrowTf.position = Ax; 17}

投稿2016/12/05 10:52

編集2016/12/05 16:38
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tokita

2016/12/05 11:25

transformに値を代入しないと動かないのは完全に穴でした。 関係はないのですが、この記述をjavaで書く場合は上手く動くらしいです。 仕様の違いなのかとは思いますが、、、
退会済みユーザー

退会済みユーザー

2016/12/05 11:43

javaではなくJavascriptですね。(UnityScript) UnityScriptではtransform.positionのx,y,zの値を個別に直接変更できますが、C#では仕様上出来ません。
tokita

2016/12/05 12:20 編集

質問に迅速に回答して下さってありがとうございます! 追加回答も参考になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問