【Unity】Vector3.MoveTowardsを使って1マスずつ移動する方法

2017.09.10 自習室 0

ここでは下の動画のように、移動時にある一定の大きさのマスから外れることなく、1マスずつ移動する方法を説明します。

vector3.movetowardsの移動サンプル

この動画はUnity1weekという1週間ゲームジャムで作ったゲームを元にしています。実際の操作感を知りたい場合は以下のリンクからプレイできますので、試してみてください。

ゲームはこちらからプレイできます

環境

  • Unity 2017.1.0f3

このページの構成

ポイント
スクリプト全文
処理の説明
参考記事

ポイント

手順としては以下のとおりです。
① 現在の位置が移動開始時に指定した目的地と同じか確認する(移動中かどうかを判定する)。
② 移動中でなければ入力を受け付け、移動後の位置を算出する。
③ Vector3.MoveTowardsを使って移動する。

スクリプト全文

処理の説明

Vector3.MoveTowardsについて

全体の処理としてはややこしくないと思うので特に説明することもないのですが、移動時に使用している Vector3.MoveTowards についてだけ簡単に説明します。

Vector3.MoveTowards は「現在地」から「目的地」まで「一定速度」で移動させてくれる関数です。引数の “current” に現在地、”target” に目的地、”maxDistanceDelta” に1フレームの最大移動距離(=速度)を指定することで目的地まで移動させることができます。

公式スクリプトリファレンス

public static Vector3 MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta);

現在の位置 current から target に向けて移動します。
この関数によって返された値は直線上の current と target の間にある maxDistanceDelta ごとに移動する target 寄りの位置になります。target が maxDistanceDelta よりも近い場合、 返される値は target の位置と同等になります。(すなわち、target 以上には進みません) maxDistanceDelta が負の値だと、target から遠ざかっていきます。

同じような処理をするものとして Vector3.Lerp(Vector3.Slerp) があります。こちらを使うと移動速度が一定ではなくなり、最初と最後の速度が緩やかな、なめらかな移動になります。

ただし1マスずつ減速してしまうので連続移動には向いていません。タップで指定した位置まで移動する場合など、ある程度離れた位置に一気に移動する場合には使えるかも。

vector3.lerpを使った移動サンプル  

Vector3.MoveTowards、Vector3.Lerpの参考リンク

Vectorを使った移動方法

参考記事


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です