27638


以下の画像のような状況で，手前の赤四角をクリックすると赤キューブが動かせて，青四角をクリックすると青キューブが動かせるようにしたいです。

[![画像の説明をここに入力](https://i.stack.imgur.com/pcfFA.png)](https://i.stack.imgur.com/pcfFA.png)

赤キューブと青キューブは画面をクリックした時に，クリックした場所に動くように設定しています（Unity本家サイトのマニュアル通りです[http://docs.unity3d.com/jp/current/Manual/nav-
MoveToClickPoint.html](http://docs.unity3d.com/jp/current/Manual/nav-
MoveToClickPoint.htmlhttp://docs.unity3d.com/jp/current/Manual/nav-
MoveToClickPoint.html)）。

[code]

    using UnityEngine;
    
    public class MoveTo : MonoBehaviour {
        NavMeshAgent agent;    
        void Start() {
            agent = GetComponent<NavMeshAgent>();
        }
    
        void Update() {
            if (Input.GetMouseButtonDown(0)) {
                RaycastHit hit;
    
                if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 500)) {
                    agent.destination = hit.point;
                }
            }
        }
    }
    
[/code]

上のコードに  
・現在のプレイヤーを宣言  
・クリックしたら現在のプレイヤーを設定  
・現在のプレイヤーと自身が等しければ移動  
を加えればいけるとは思うのですが，赤四角（Canvasのimage）をクリックした時に上のScript内で設定する方法がわかりません。


CC BY-SA 3.0
2016-07-09T00:07:48.447
27465
2016-07-21T10:17:42.570
8100
question
unity3d
Nav Mesh Agentの切り替え方法


他のサイトで解決したので貼り付けておきます。  
<https://teratail.com/questions/40546>

> 私ならこうする、という一案です。  
>  下記のMoveToClickPoint.csを、プレイヤー（実際に動くオブジェクト）とは別のオブジェクトに付与します。  
>  そしてImageではなくButtonを使います。これでクリックが取得出来るようになります。  
>  ボタンからPushPlayerChoiceを呼び出すようにすれば動くかと思います。
[code]

    // MoveToClickPoint.cs
    using UnityEngine;
    
    public class MoveTo : MonoBehaviour {
        //インスペクタから、player1とplayer2のNavMeshAgentをドロップ＆ドロップしておきます
        public NavMeshAgent agent1;
        public NavMeshAgent agent2;
    
        //実際に使用するエージェント
        NavMeshAgent agent;
    
        void Start() {
            //初期値を設定
            agent = agent1;
        }
    
        void Update() {
            if (Input.GetMouseButtonDown(0)) {
                RaycastHit hit;
    
                if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 500)) {
                    agent.destination = hit.point;
                }
            }
        }
    
        //ボタンから呼び出します。1を渡せばプレイヤー１、2を渡せばプレイヤー２をセット。
        public void PushPlayerChoice (int num) {
            if (num == 1 && agent != agent1) {
                agent = agent1;
            } else if (num == 2 && agent != agent2) {
                agent = agent2;
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2016-07-15T02:45:36.997
27638
2016-07-21T10:17:42.570
2016-07-21T10:17:42.570
8100
8100
27465
answer