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

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

ただいまの
回答率

87.37%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 592

score 622

知りたいこと

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

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

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

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PointBulb : MonoBehaviour
{
    GameObject P ;
    GameObject casole;
    RectTransform cp;

    Vector3 pos;
    Vector3 newpos;
    Vector3[] yubipos = new Vector3[] //指のアイコンをこれらの座標に移動させる
    {
      new Vector3 (158,97,0),new Vector3 (44,88,0),new Vector3 (-322,-131,0),new Vector3 (109,-84,0)
    };
    void Start()
    {
        casole = GameObject.FindWithTag("casole");
        cp = casole.GetComponent<RectTransform>();
        P = transform.parent.gameObject;

    }

    // Update is called once per frame
    void Update()
    {
        if( pos != newpos )
        {
            pos = newpos;
            Debug.Log("pos" + pos);
            Debug.Log("newpos" + newpos);

            cp.localPosition = newpos;
        }        
    }

    public void Change()
    {
        switch (P.name) 
        {
            case  "01" :
                cp.localPosition = yubipos[00];
            break;

            case  "02" :
                newpos = yubipos[01];
            break;

            case  "03" :
                newpos = yubipos[02];
            break;

            case  "04" :
                cp.localPosition = yubipos[03];
            break;
        }
    }
}


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

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

0

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

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

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/08/01 17:47

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

    スッキリしました、ありがとうございました。

    キャンセル

0

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

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

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/08/01 17:50 編集

    別の方が理由を説明してくださいました。

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

    ありがとうございました。

    キャンセル

  • 2019/08/01 18:00

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

    キャンセル

  • 2019/08/01 18:04

    わかります、別の方法が見つかっても、あれはなぜダメだったのだろう...というもやもやが残りますよね。

    もやもやを取り除くことができれば、将来的な問題の解決にもつながると思うので、今後も皆様のお力をお借りして解決していきたいと思います。

    キャンセル

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

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

関連した質問

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