ミニマムブロック

頭の中でつながるまで

youtube シンプルRPG part1 解説

フィールドを作成→NavMashをbakeで展開、staticとかの設定

キャラクターを用意

キャラクターが動くように設定→worldInteractionスクリプト、NavMashAgentを設定、オブジェクトにタグを設定(worldInteractionスクリプトにそう設定したため)

クリック時の処理

クリックしたポイントを取得するにはRay interactionRay, Physics.Raycastで

RayCastHit interactionInfoに位置情報をつめる。

プレイヤーの移動にはNavMashAgentの移動を利用

 

行ったこと

①worldInteracitonスクリプトを作る

②updateメソッドを作る

③Input.GetMouseButtonDown(0)でクリックに対応

④!IsPointerOverGameObjectでゲームオブジェクトじゃないことを判定

行き過ぎとかを防ぐための処理か。変なところをクリックした場合は処理が起きない

⑤GetInteractionを条件に合う場合、行う

⑥Ray interactionRay = でRayクラスのインスタンスを宣言

?⑦Camera.main.ScreenPointToRay(Input.mousePosition) でRayを取得?

⑧RaycastHit interactionInfoを用意

⑨Physics.RaycastでRaycastHit interactionInfoの中身を取得

Physics.Rayccast(interactionRay, out interactioninfo, Mathf.Infinity)

⑩Game画面でフィールドにNavMashを作成、bakeで設定を展開

⑪plyaerにNavMashAgentを追加

⑫場所の移動を実装したい

フィールドにnavMashを設定

playerにNavMashAgentを設定

スクリプトでNavMashAgentを取得

クリック時、playerAgent.destination = interactioninfo.pointで移動先を設定、移動させる

 

Points

・playerにworldInteractionスクリプトを設定する

・playerにnavMashAgentを設定する

・worldInteractionスクリプトにクリック時の処理を記述

・クリックした地点を取得するのは、

Ray interactionRay = Camera.main.ScreenPointToRay(Input.mousePosition)

・Physics.Raycastでクリック先のオブジェクト(RaycastHit interactionInfo)を取得

RaycastHit interactionInfo;

Physics.Rayccast(interactionRay, out interactioninfo, Mathf.Infinity);

 

クリック時の処理を追加

if(input.GetMouseButtonDown(0)){}

//これは何?→オブジェクトをタッチしているか知るときにはこれ

//EventSystem.current.IsPointerOverGameObject ()

UnityEngine.EventSystems.EventSystem.current.IsPointOverGameObject

}

 

 RayCastを使用。クリックしたときのポイントからオブジェクトを取得?

 

 

Ray interactionRay = Camera.main.ScreenPointToRay(Input.mousePosition);

RayCastHit interactionInfo;

//physics.Raycast(Ray, out, length)

if(physics.Raycast(interactionRay, out interactionInfo, Mathf.Infinity)){

//当たったものが何かを判定するときにタグをつけて、

//処理を分岐させる

if(interactedobject.tag == "Interactable Object"){

Debug.log("Interactable interacted.");

}else{

 

}

}

 

③staticをつける

動くオブジェクトとそうでないものを分ける

④navMashをゲーム画面で設定する

 

⑥interactionInfo.point

pointは場所情報(x,y,z)を指す

canvasを作る、EventSystemが作られる

⑧playerにnavMeshAgentを追加する

スピードなどを持っている

スクリプトにnavMashを追加する

navMeshAgent playerAgent; //worldInteraction のフィールドとして追加

//start メソッドで

playerAgent = GetComponent<NavMeshAgent>(); //フィールドに実体を追加 

⑨worldInteractionスクリプトはplayerにつける