Move
それぞれの移動方法についての違いや使い分け方、動きの確認ができるサンプルコードを以下に示します。
1. Transform
特徴
- 最も基本的な移動方法で、直接オブジェクトの位置を設定する。
- 物理演算の影響を受けないため、瞬時に位置を変更できる。
サンプルコード
using UnityEngine;
public class TransformMovement : MonoBehaviour {
public float moveSpeed = 5f;
void Update() {
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
transform.Translate(movement * moveSpeed * Time.deltaTime);
}
}
2. Rigidbody
特徴
- 物理演算を利用した移動方法。力やトルクを使ってオブジェクトを動かす。
- 自然な物理挙動を持つ。
サンプルコード
using UnityEngine;
public class RigidbodyMovement : MonoBehaviour {
public float moveForce = 10f;
private Rigidbody rb;
void Start() {
rb = GetComponent<Rigidbody>();
}
void FixedUpdate() {
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
rb.AddForce(movement * moveForce);
}
}
3. CharacterController
特徴
- キャラクターの移動に特化したコンポーネント。
- 衝突判定が簡単で、物理演算の影響を受けない。
サンプルコード
using UnityEngine;
public class CharacterControllerMovement : MonoBehaviour {
public float moveSpeed = 5f;
private CharacterController controller;
void Start() {
controller = GetComponent<CharacterController>();
}
void Update() {
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
controller.Move(movement * moveSpeed * Time.deltaTime);
}
}
4. NavMeshAgent (+ OffMeshLink)
特徴
- AIやNPCの移動に適している。ナビゲーションメッシュを使って経路を計算。
- OffMeshLinkを使うと、特定の移動パスを持つNPCを実装できる。
サンプルコード
using UnityEngine;
using UnityEngine.AI;
public class NavMeshMovement : MonoBehaviour {
public Transform target;
private NavMeshAgent agent;
void Start() {
agent = GetComponent<NavMeshAgent>();
}
void Update() {
agent.SetDestination(target.position);
}
}
5. Animation
特徴
- アニメーションを用いてオブジェクトを動かす方法。自然な動きのキャラクターを作るために重要。
サンプルコード
using UnityEngine;
public class AnimationMovement : MonoBehaviour {
public Animator animator;
void Update() {
float move = Input.GetAxis("Vertical");
animator.SetFloat("Speed", move);
}
}
Animator ControllerにはSpeedというFloatパラメーターを設定して、移動に応じてアニメーションを制御するようにします。
6. DOTween
特徴
- Tweenライブラリを使い、スムーズな移動やフェードイン・アウトを実現する。
サンプルコード
using UnityEngine;
using DG.Tweening;
public class DOTweenMovement : MonoBehaviour {
void Start() {
transform.DOMove(new Vector3(0, 0, 5), 2f).SetEase(Ease.OutQuad);
}
}
7. Spline Movement
特徴
- スプライン曲線に沿った移動ができる。カスタムパスに沿った移動を実現。
サンプルコード
using UnityEngine;
public class SplineMovement : MonoBehaviour {
public Transform[] points;
public float speed = 1f;
private float t = 0f;
void Update() {
t += Time.deltaTime * speed;
t = Mathf.Clamp01(t);
transform.position = GetPointOnSpline(t);
}
Vector3 GetPointOnSpline(float t) {
int p0 = Mathf.FloorToInt(t * (points.Length - 1));
int p1 = (p0 + 1) % points.Length;
return Vector3.Lerp(points[p0].position, points[p1].position, t * (points.Length - 1) - p0);
}
}