【Unity】CharacterControllerで氷の上を滑るシミュレーションを実装する方法
この記事では、Unityでキャラクターが氷の上を滑る動作を実装する手順を説明します。キャラクターコントローラを使用してプレイヤーの動きを制御し、スクリプトで滑る動きをシミュレートします。
目次
手順
新しいプロジェクトを作成
- Unityを起動して新しいプロジェクトを作成します。
プレイヤーオブジェクトの作成
- Hierarchyビューでプリミティブオブジェクト(例:
Capsule
、Cube
、Sphere
など)を作成し、名前を「Player」に変更します。 - または、外部で作成した3Dモデル(
FBX
やOBJ
形式)をUnityのAssets
フォルダにインポートし、それを使用してPlayer
オブジェクトとして設定します。 - 注意:プリミティブオブジェクトにはデフォルトでコライダーがアタッチされていますが、キャラクターコントローラには独自のコライダーが含まれているため、デフォルトのコライダーは削除します。
キャラクターコントローラの追加
- Playerオブジェクトに
Character Controller
コンポーネントを追加します。このコンポーネントは、プレイヤーの移動をスクリプトで制御します。 - 重要:キャラクターコントローラでは、
Physics Material
は無効です。摩擦や滑りなどの物理効果はスクリプトで直接制御する必要があります。
氷のオブジェクトの作成
- Hierarchyビューで新しいGameObjectを作成し、名前を「Ice」とします。
Ice
オブジェクトにBox Collider
を追加して、衝突判定を行えるようにします。- 重要:
Ice
オブジェクトにPhysics Material
を設定しても、キャラクターコントローラではこの設定は無効になります。そのため、氷の上での滑る挙動はスクリプトで再現します。
プレイヤーの移動スクリプト
Player
オブジェクトに以下のスクリプトを追加し、プレイヤーが氷の上を滑る動きをシミュレートします。
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float speed = 10f;
private CharacterController controller;
private Vector3 moveDirection = Vector3.zero;
private bool isOnIce = false;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
Vector3 inputDirection = new Vector3(horizontal, 0, vertical);
inputDirection = transform.TransformDirection(inputDirection);
// 通常の移動
if (!isOnIce)
{
moveDirection.x = inputDirection.x * speed;
moveDirection.z = inputDirection.z * speed;
}
else
{
// 氷の上では摩擦を減らした滑る挙動をシミュレート
moveDirection = Vector3.Lerp(moveDirection, inputDirection * speed, Time.deltaTime);
}
controller.Move(moveDirection * Time.deltaTime);
}
void OnControllerColliderHit(ControllerColliderHit hit)
{
if (hit.gameObject.tag == "Ice")
{
isOnIce = true; // 氷に触れているとき滑る状態にする
}
else
{
isOnIce = false; // 氷以外の表面では通常の移動に戻る
}
}
}
タグの設定
Ice
オブジェクトに「Ice」タグを設定します。プレイヤーがIce
オブジェクトに衝突すると、OnControllerColliderHit
メソッドが呼び出され、氷の上にいることを判定して滑る動作が再現されます。
拡張アイデア
このサンプルをもとに、以下のような機能を追加してゲームを拡張できます。
- ジャンプ機能: プレイヤーが氷の上でジャンプして、より遠くまで飛べるようにする。
- アイテムの追加: 氷の上にアイテムを配置し、取得するとスコアが増える。
- 障害物の追加: 氷の上に障害物を置き、プレイヤーが衝突するとゲームオーバーにする。
これで氷の上を滑るサンプルが完成です。キャラクターコントローラでは物理エンジンのPhysics Material
が無効であるため、スクリプトを使って滑りをシミュレートします。また、氷の上にいるかどうかをタグで判定し、スムーズな滑りの動きを実現しています。
ディスカッション
コメント一覧
まだ、コメントがありません