每当玩家开枪并在停止射击时重置枪的位置时,如何向上推相机?

时间:2017-07-22 01:02:44

标签: c# unity3d camera quaternions

所以我使用标准资产的FPS控制器预制件,并将我的脚本“Camera Push Up Effect”附加到主摄像头(FirstPersonCharacter)。一切正常,但我现在面临的问题是每当玩家开枪时,它都不会向上推动相机。我在这里要做的就是给玩家的枪提供一些后坐力,这样当玩家射击时它不会留在一个地方。我还想限制玩家在x轴上的旋转,这样枪就不会永远上升(最小值为-90度,最大值为0)。

using UnityEngine;
using InControl;

public class CameraPushUpEffect : MonoBehaviour
{
    public float rotateSpeed;
    public float maxRotationX;
    public float minRotationX;
    private Vector3 V3Rotate = Vector3.zero;

    // Update is called once per frame
    void Update ()
    {
        InputDevice device = InputManager.ActiveDevice;

        if(device.RightBumper) // The player is shooting.
        {
            pushCameraUp();
        }
        else if (transform.localRotation.x != 0) // Slerp back to the original unrotated position.
        {
            transform.localRotation = Quaternion.Slerp(transform.localRotation, Quaternion.identity, 
                                                       Time.deltaTime * rotateSpeed);
        }
    }

    private void pushCameraUp()
    {
        V3Rotate.x += rotateSpeed * Time.deltaTime;
        float newRotationX = Mathf.Clamp(V3Rotate.x, minRotationX, maxRotationX);
        Quaternion maxRotation = Quaternion.Euler(newRotationX, 0, 0);
        transform.localRotation = Quaternion.Slerp(transform.localRotation, maxRotation, Time.deltaTime * rotateSpeed);
    }
}

1 个答案:

答案 0 :(得分:0)

看起来主要的罪魁祸首是The First Person Controller脚本中的鼠标外观脚本(此脚本是FPSController预制件的一部分)。请注意,我使用的统一体有鼠标外观而不扩展MonoBehaviour,并设置为私有序列化。我找到答案的帖子提到,如果将鼠标外观组件连接到主摄像头,则无法旋转摄像头(X轴),这显然不是这种情况(FPSController是孩子的父亲FirstPersonCharacter标记为主摄像头,FirstPersonCharacter没有附加鼠标外观)。所以我只是禁用了第一人称控制器脚本来确认这是否属实,确实是。

这是链接以防其他人想要查看它。

Help with Recoil for guns