ターゲットに向かって、まっすぐ進んでいくスクリプトをつくりましょう。
Vector3.MoveTowardsを使えば、ターゲット(目的地点)や移動スピードをかんたんに設定できます。
クリックした位置にターゲットを置き、この場所に向かって直線的に進んでいきます。
関連記事:
空間の中でクリックした位置へ行く
指定した座標(目的地点)へ行く
エリアに入れば自動で移動(ムービングウォーク)
特定の座標で移動を止める
マウスカーソルを追いかけるオブジェクト
3D空間でプレーヤーを追いかけるオブジェクト
ターゲットに向かってオブジェクトをぶつける
MoveTowardsを使った動き
Plane、Cube、Sphereを作成します。
CubeのY座標は0.5にして地上に出し、リジッドボディを追加しています。
Sphereは、スフィアコライダーのチェックを外し、サイズを0.5に。
こちらもY座標は0.5に設定しています。
まずは、ターゲット(Sphere)に向かって、直線的に進んでいくプログラムをつくりましょう。
CubeMove.csを作成し、Cubeに追加します。
CubeMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { [SerializeField] GameObject target; private float speed = 3.0f; void Update() { //スタート位置、ターゲットの座標、速度 transform.position = Vector3.MoveTowards( transform.position, target.transform.position, speed * Time.deltaTime); } } |
ターゲットのフィールドに、Sphereを入れます。
ゲームプレイして、動きを確認してみましょう。
目標のオブジェクトに向かって、直線距離で進んでいきした。
今回、Vector3.MoveTowardsの中は、「現在位置、ターゲットの座標、速度」の順に設定しています。
ターゲット位置をクリックで変える
続いて、ターゲットの位置を、クリックで変更できるようにします。
TargetPosition.csを作成し、Sphereに追加します。
TargetPosition.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TargetPosition : MonoBehaviour { void Update() { if (Input.GetMouseButtonDown(0)) { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) { //Y座標はCube(プレーヤー)の中心になるように transform.position = new Vector3 (hit.point.x, 0.5f, hit.point.z); } } } } |
ターゲットのY座標(高さ)は、プレーヤー(Cube)の中心となるように設定します。
ここでは、0.5で設定しました。
ゲームプレイしてみましょう。
ゲームビューの、Plane上をクリックすれば、Sphereの位置が変わります。
位置変わるたびに、Sphere(ターゲット)に向けてまっすぐ進んでいきます。
ここで、Sphereを透明にしてみましょう。
Sphereにマテリアルを追加し、レンダリングモードをFadeに設定。
アルベドから、アルファ値(A)を0に設定します。
ゲームプレイして、ゲームビューのPlaneをクリックしてみましょう。
クリックした位置に移動するようなイメージに仕上がります。
関連記事:
空間の中でクリックした位置へ行く
指定した座標(目的地点)へ行く
エリアに入れば自動で移動(ムービングウォーク)
特定の座標で移動を止める
マウスカーソルを追いかけるオブジェクト
3D空間でプレーヤーを追いかけるオブジェクト
ターゲットに向かってオブジェクトをぶつける