【Unity】しゃがみやリーンと一緒に懐中電灯を動かす

投稿者: | 2021-03-09

FPSプレイヤーが顔を傾けたりしゃがんだりしているときに、懐中電灯の位置も同じように変えてみました。

懐中電灯として使うスポットライトは、ピボットである空のゲームオブジェクトの子になっています。カメラの動きに少し遅れてついてくるようにしたいので、プレイヤーの子にはせず、Updateメソッドで位置や回転を入れます。

遅れてくるようにするには、回転をそのまま入れずに、Quaternion.Lerpメソッドを使います。

// 懐中電灯を動かす
void MoveLight(float posY)
{
    if (懐中電灯が点灯中)
    {
        // 懐中電灯にFPSカメラの回転を入れる
        flashLight.transform.localRotation = Quaternion.Lerp(flashLight.transform.localRotation, m_Camera.transform.localRotation, 0.6f);

        // ピボットにプレイヤーの回転を入れる
        flashLightPivot.transform.rotation = Quaternion.Lerp(flashLightPivot.transform.rotation, transform.rotation, 0.6f);

        Vector3 pos = transform.position;
        pos.y += posY;
                
        // ピボットにプレイヤーの位置を入れる
        flashLightPivot.transform.position = pos;

    }
}

ピボットに位置を代入するときに、高さを変えられるようにしています。この値は普段は、FPSコントローラーでしゃがむで使うカメラの高さの値にしているので、しゃがみと同時に懐中電灯の高さも上げ下げできます。しゃがんでいないときは0です。

プレイヤーの状態によってこの引数の値を変えられると、いろんな体勢で懐中電灯を使えます。

また、FPSで歩きに合わせて手元を揺れ動かすで懐中電灯のローカル位置に代入する値のx座標に、FPSキャラのカメラを横に傾ける #2でつかう、X方向の頭の位置の値を足すと、リーンにも追従させられました。

Vector3 handBob = m_HandBob.DoHeadBob( // ... // );
handBob.x += leanPosX;
flashLight.transform.localPosition = handBob;

コメントを残す

メールアドレスが公開されることはありません。