道を作っただけでエンドレスランゲームは作れんのですよ。ということで次は実際に動くプレイヤーを作って見ましょう
目次
プレイヤーを作る
ステージがなーんとなく作れるようになりましたが、ゲームとして動きが無いですね。ということで今回はプレイヤーになるものを作りましょう。
とにかく動け!
- 仮プレイヤーを追加
- 3D Object > Cube(名前:Runner)
- Runnerオブジェクトにプレイヤーになるスクリプトをアタッチ
- Add Compoment>Dreamteck>Forever>Gameplay>Basic Runner
- コンポーネントの数字を変更。下図を参考に変更してください。変更点意外も違うところがないか注意してください。
- 動かしてみる
- 速前進します
カメラを後ろから追従させる
プレイヤーは走り去っていくけど、カメラは置いてけぼりです。次はカメラが後ろからプレイヤーをおかけるようにしましょう。
- Cinemachineをインストール
- Window>Package Managerからパッケージマネージャーを表示
- 左上のメニューをUnity Registryに切り替え
- Cinemachineを探してインストール
- Virtual Cameraを追加
- GameObject>Cinemachine>Virtual Cameraを選択
- 追加されたCM vcam1の設定を変更
- デフォルトから以下を設定変更
- Follow>RunnerのGameObject
- Look At>RunnerのGameObject
- Body
- Follow Offset (0f,2f,-10f)
制御処理を追加する
とりあえず動くようになりましたが、まだゲームは作れないですね。動くプレイヤーに移動処理や当たり判定を追加しましょう。
左右に移動する
Runnerゲームオブジェクトに貼り付けることで、左右への移動が可能になります。
using UnityEngine;
using Dreamteck.Forever;
public class RunnerMover : MonoBehaviour
{
private Runner runner;
public float moveSpeed = 5f;
public float clampWidth = 4f;
void Start()
{
runner = GetComponent<Runner>();
}
private void Update()
{
runner.motion.offset += new Vector2(Input.GetAxis("Horizontal"), 0f) * moveSpeed * Time.deltaTime;
runner.motion.offset = new Vector2(Mathf.Clamp(runner.motion.offset.x, -clampWidth, clampWidth), runner.motion.offset.y);
}
}
何かに当たったら止まる
ゴールやゲームオーバーになるお邪魔オブジェクトとの接触などが取れないと、ゲームを作るのは難しいです。ここではトリガーモードの当たり判定に接触したら停止する処理を作って見ましょう。
using Dreamteck.Forever;
using UnityEngine;
public class HitDetector : MonoBehaviour
{
private void OnTriggerEnter(Collider other)
{
Runner runner = GetComponent<Runner>();
runner.follow = false;
}
}
スクリプトはRunnerスクリプトと同じ位置に付ける必要があります。モデルの構成が変わる場合、当たり判定が必要になりますので、コライダーと同じ位置関係が必要になります。
- HitDetectorコンポーネントをアタッチ
- Rigidbodyコンポーネントをアタッチ
- Is Kinematic:enable(チェックを入れる)
あと障害物になる当たり判定のCubeを追加します。
- Cubeを追加
- 3D Object>Cube
- BoxColliderを追加
- Is Trigger:enable(チェックを入れる
- Runnerの通り道にTransformを調整
- Position(0,0,30)
- Scale(5,5,1)
コメント