やりたいこと
Unityでマウスで操作するFPSっぽい挙動を作成します。
作成方法というか注意点などを挙げていきます。
また作成中なので間違いがあるかもしれませんので参考程度に見てください。
仕様:
マウスの左右移動 → 視点移動
左クリック → 前進
壁にぶつかったら止まる
環境
Unity:6000.0.23f1.7976.6000.0/Staging4246
実装
Playerとカメラの用意
Playerの作成
Hierarchyの+からPlayerとなる3Dオブジェクトを作成します。
FPSで見えないのでなんでもいいのですがCubeにしました。今後の当たり判定などを考えるとCubeが無難だと思います。
Cameraの移動
HierarchyビューのMainCameraをPlayerにドラッグアンドドロップしてPlayerの子供にします。
以下のように階層構造になります。
MainCameraをPlayerの子供にすることでPlayerを移動したときに自動的にCameraが追尾するようになります。
上記の通りカメラはPlayerを追尾するので、カメラをPlayerと同じX,Zに移動します。YはPlayerの少し上にします。
下のCubeがPlayerで矢印があるところがカメラです。
PlayerにScriptの追加
Playerには以下のようにしました。
using UnityEngine;
public class player : MonoBehaviour
{
private float speed = 5.0f;
void Update()
{
float mx = Input.GetAxis("Mouse X");////マウスの移動量の取得
if (Mathf.Abs(mx) > 0.001f)
{
transform.RotateAround(transform.position, Vector3.up, mx); ////視点の更新
}
if (Input.GetMouseButton(0))//////////マウス左ボタンが押されている間繰り返し呼ばれる
{
float zMovement = speed * Time.deltaTime;
transform.Translate(0, 0, zMovement);/////前進
}
}
}
物理演算の追加
Playerの設定
PlayerのAddComponentからRigidBodyを追加して以下のように設定を変更します。
Freeze PositionのYにチェックを入れることで物体に衝突したときの跳ねるような挙動を止めます。(必須ではないです。)
Freeze RotationのX,Y,Zにチェックを入れることで物体に衝突したときの回転の挙動を止めます。このチェックを入れないと衝突したときにカメラも一緒に回転するので入れたほうがいいです。
壁、障害物の設定
ここでは以下の記事で行ったBlenderで作成したオブジェクトを壁として使用します。
ただし物理演算を単純にするため”Generate Collider”にチェックは外しました。
追加したオブジェクトをHieralchyビューで選択し、Box Colliderを追加します。
EditCollierをクリックします。
Sceneビューに以下のように緑の枠が表示されるのでオブジェクトに合わせます。
(オブジェクトを選択したときに青枠が表示されますが、それとは別の範囲なので注意)
続いてRigidbodyを追加し以下のようにFreeze PositionおよびFreeze Rotationのすべてのチェックを入れます。
これで衝突しても壁は動いたりしません。
コメント