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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

2回答

500閲覧

【Unity】Postionの変更命令が一度しか通らない

Y0241-N

総合スコア1066

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

1クリップ

投稿2019/08/01 07:43

編集2019/08/01 08:35

知りたいこと

変更自体は別の方法でできるようになったのですが、理由を知りたかったので質問させていただきます。

ボタンコンポーネントを押した際に、画像を指定の座標位置に移動させる命令を考えていたのですが、
case "01"、"04"の命令文では何回押しても問題なく座標変更してくれるのですが、
case "02"、"03"の命令文だと、一回目は座標変更するが、二回目以降は反応しません。

02を押す(一回目)移動する→03を押す(一回目)移動する→02を押す(二回目以降)移動しない→03を押す(二回目以降)移動しない
という感じです。

(もともと02の命令で実行していたが、そもそもこんな過程を踏む必要がないと気づき01の命令に変更した)
イメージ説明

C#:

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class PointBulb : MonoBehaviour 7{ 8 GameObject P ; 9 GameObject casole; 10 RectTransform cp; 11 12 Vector3 pos; 13 Vector3 newpos; 14 Vector3[] yubipos = new Vector3[] //指のアイコンをこれらの座標に移動させる 15 { 16 new Vector3 (158,97,0),new Vector3 (44,88,0),new Vector3 (-322,-131,0),new Vector3 (109,-84,0) 17 }; 18 void Start() 19 { 20 casole = GameObject.FindWithTag("casole"); 21 cp = casole.GetComponent<RectTransform>(); 22 P = transform.parent.gameObject; 23 24 } 25 26 // Update is called once per frame 27 void Update() 28 { 29 if( pos != newpos ) 30 { 31 pos = newpos; 32 Debug.Log("pos" + pos); 33 Debug.Log("newpos" + newpos); 34 35 cp.localPosition = newpos; 36 } 37 } 38 39 public void Change() 40 { 41 switch (P.name) 42 { 43 case "01" : 44 cp.localPosition = yubipos[00]; 45 break; 46 47 case "02" : 48 newpos = yubipos[01]; 49 break; 50 51 case "03" : 52 newpos = yubipos[02]; 53 break; 54 55 case "04" : 56 cp.localPosition = yubipos[03]; 57 break; 58 } 59 } 60} 61

命令的には紆余曲折を経ていますが、やっていることは01も02も同じはずなのに、なぜ02は一度しか命令が実行されないのでしょうか?
お分かりになる方がいらっしゃれば、回答お待ちしています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

これ、各選択肢それぞれにスクリプトがアタッチされていませんか?
02を選択したら、02にアタッチされているスクリプトが動き、
03を選択したら、03にアタッチされているスクリプトが動く。

02、03のスクリプトのインスタンスが別なので、それぞれにpos、newposがあるので、最初だけ更新されてそれ以降が同じになっているのではないですか?
01や04は直接座標を入れているので変化しているのだと思います。

投稿2019/08/01 08:35

編集2019/08/01 08:36
YAmaGNZ

総合スコア10258

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

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

Y0241-N

2019/08/01 08:47

あ~~~!なるほど、確かにその通りですね。 ご指摘の通りButtonごとに同じスクリプトがアタッチされているので、それぞれのスクリプトが動作する形になっていますね。 スッキリしました、ありがとうございました。
guest

0

posとnewposが1回目で同じになっているので、2回目は実行されないと思います。

追記
と思いましたが、02の後に03が実行されたら、03の場所には行きそうですね・・・。

投稿2019/08/01 08:21

編集2019/08/01 08:23
k.matsuda

総合スコア293

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

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

Y0241-N

2019/08/01 08:28

はい、そうなんです...。 処理的には02を実行した後に03を実行すれば、posとnewposの値は異なるので、移動するんですが、 この後にもう一度02を実行するとnewposは上書きされ、posとnewposの値が異なるので移動するはずが、何故か移動しない...なぜ?という状態です。
k.matsuda

2019/08/01 08:35

Updateのif文の前にもDebug文をつけてposとnewposを確認してはどうでしょうか?
Y0241-N

2019/08/01 09:02 編集

別の方が理由を説明してくださいました。 このスクリプトがButtonそれぞれにアタッチされているため、対応するボタンを押した際に、「そのボタンについているスクリプト」が処理を実行していたため、別のボタンを押しても、別のボタンについているposとnewposの値が変更されるので、結果もう一度おしたところでposとnewposの値が変わっていないので、変更の処理が発生しない。という話でした。 ありがとうございました。
k.matsuda

2019/08/01 09:00

スッキリしてよかったです。 こういう、同じような事してるのに何でこっちだけ失敗するのか? という疑問は、本筋そっちのけで時間使って調べたりしがちです。
Y0241-N

2019/08/01 09:04

わかります、別の方法が見つかっても、あれはなぜダメだったのだろう...というもやもやが残りますよね。 もやもやを取り除くことができれば、将来的な問題の解決にもつながると思うので、今後も皆様のお力をお借りして解決していきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問