LoginSignup
0
0

More than 3 years have passed since last update.

Unity 3D入門 #8 [ライトの実装&一人称視点 ]

Posted at

ホラーゲームによくあるライトの実装をします。

まずは懐中電灯の実装ということで、下のURLを参考に行なっていきます。

参考URL:https://gametukurikata.com/light/flashlight

Unityに初めからついているDirection Lightがついているとライトの機能の確認が難しいので、チェックを外して世界を暗闇にします。

また、そのままだと、懐中電灯によるSpot Lightのみが光源となってしまうため、下のURLにあるPoint Lightをプレイヤーの場所に設置します。
ライトの種類参考URL:https://creator.cluster.mu/2020/04/15/unity-light/

スクリーンショット 2020-07-29 13.07.14.png

ホラーゲームっぽくなってきました。

次に、カメラを今の3人称視点から一人称視点に変更します。

参考URL:https://codegenius.org/open/courses/24/sections/117

スクリーンショット 2020-07-29 13.13.19.png

とりあえず一人称視点とすることができました。あとはMain Cameraを基準としたプレイヤーの動きの変更とカメラアングルの変更コードを書いていきます。

Vector3 tmp = player.transform.position;  // Playerの位置情報を取得
Vector3 cam = new Vector3(tmp.x, tmp.y + 1.2f, tmp.z);
this.transform.position = cam;

ここで、参考URLではプレイヤーとカメラに親子関係を持たせていますが、このゲームでの実装ではカメラとプレイヤーを別々のオブジェクトとして、カメラは単純にプレイヤーの位置を追従するようにします。

Vector3 angle = this.transform.eulerAngles;  // 現在のカメラアングル
if (Input.GetKey(KeyCode.D)) { angle.x += Time.deltaTime * _positionStep; }
if (Input.GetKey(KeyCode.A)) { angle.x -= Time.deltaTime * _positionStep; }
if (Input.GetKey(KeyCode.E)) { angle.y += Time.deltaTime * _positionStep; }
if (Input.GetKey(KeyCode.Q)) { angle.y -= Time.deltaTime * _positionStep; }
this.transform.eulerAngles = angle;  // カメラアングルの変更

カメラアングルの変更はDAEQで行うようにしました。

また、一人称にするとプレイヤーがチラチラカメラに写ってしまい目障りなので、プレイヤーオブジェクトはカメラに映らないようにします。
参考URL:https://teratail.com/questions/155158

原因不明ですが、SubCameraを使用すると十字キーでプレイヤーを移動した時に床をすり抜けるバグが発生したので、Main Cameraを一人称視点にしました。

また、Main CameraにSpot Lightを親子関係にしたらうまく動作しなかったので、Spot Lightは個別のオブジェクトとしてプレイヤーの位置とカメラの角度を追うようにしました。

private GameObject cameraObject;
private GameObject player;
void Start() {
    cameraObject = GameObject.Find("Main Camera");
    player = GameObject.FindWithTag("Player");
}
void Update() {
    Vector3 tmp = player.transform.position;
    Vector3 light = new Vector3(tmp.x, tmp.y + 1.2f, tmp.z);
    this.transform.position = light;
    this.transform.forward = cameraObject.transform.forward;
}

これで、できたものが以下となります。

ezgif-4-b66f47b780e3.gif

割と不具合が多く大変でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0