C# 如何创建Unity3d Cinemachine第三人移动滑动摄像头?

C# 如何创建Unity3d Cinemachine第三人移动滑动摄像头?,c#,unity3d,swipe,touchscreen,cinemachine,C#,Unity3d,Swipe,Touchscreen,Cinemachine,我已经创建了一个第三人称freelook相机和一个玩家控制器,它从新的输入系统动作图中获取输入,它来自左侧的stick gamepad、jump和can look;多亏了youtube教程。当我绕着我的播放器旋转,播放器朝着相机的方向移动时,相机工作得很好。 在我的手机上构建和播放之后,我意识到有一个问题,只要用户不停止按下屏幕,相机就不会停止旋转。我不希望这样,因为它开始变得越来越烦人的用户玩游戏。我希望用户按住相机并旋转它,因为他们正在拖动它周围的球员(如在手机游戏根申影响)。我不知道它的正

我已经创建了一个第三人称freelook相机和一个玩家控制器,它从新的输入系统动作图中获取输入,它来自左侧的stick gamepad、jump和can look;多亏了youtube教程。当我绕着我的播放器旋转,播放器朝着相机的方向移动时,相机工作得很好。 在我的手机上构建和播放之后,我意识到有一个问题,只要用户不停止按下屏幕,相机就不会停止旋转。我不希望这样,因为它开始变得越来越烦人的用户玩游戏。我希望用户按住相机并旋转它,因为他们正在拖动它周围的球员(如在手机游戏根申影响)。我不知道它的正确名称,但我假设它是一个滑动第三人称相机。有人能告诉我是怎么做的吗

#region Variables
[SerializeField]
private float playerSpeed = 2.0f;
[SerializeField]
private float jumpHeight = 1.0f;
[SerializeField]
private float gravityValue = -9.81f;
[SerializeField]
private float rotationSpeed = 0.1f;
private float rotationVelocity;

private Transform cameraMain;
private Transform child;
private Player playerInput;
private CharacterController controller;
private Vector3 playerVelocity;
private bool groundedPlayer;
#endregion

#region Main Methods
private void Awake()
{
    playerInput = new Player();
    controller = GetComponent<CharacterController>();
}

private void OnEnable()
{
    playerInput.Enable();
}

private void OnDisable()
{
    playerInput.Disable();
}


private void Start()
{
    cameraMain = Camera.main.transform;
    child = transform.GetChild(0).transform;
}

void Update()
{
    groundedPlayer = controller.isGrounded;
    if (groundedPlayer && playerVelocity.y < 0)
    {
        playerVelocity.y = 0f;
    }

    Vector2 movementInput = playerInput.PlayerMain.Move.ReadValue<Vector2>();
    //Vector3 move = new Vector3(movementInput.x, 0f, movementInput.y);
    Vector3 move = (cameraMain.forward * movementInput.y + cameraMain.right * movementInput.x);
    move.y = 0f;
    //controller.Move(move * Time.deltaTime * playerSpeed);

    if (move != Vector3.zero)
    {
        float targetAngle = Mathf.Atan2(move.x, move.z) * Mathf.Rad2Deg;
        float angle = Mathf.SmoothDampAngle(child.eulerAngles.y, targetAngle, ref rotationVelocity, rotationSpeed);
        child.rotation = Quaternion.Euler(0f, angle, 0f);
        controller.Move(move * Time.deltaTime * playerSpeed);
    }

    // Changes the height position of the player..
    if (playerInput.PlayerMain.Jump.triggered && groundedPlayer)
    {
        playerVelocity.y += Mathf.Sqrt(jumpHeight * -3.0f * gravityValue);
    }

    playerVelocity.y += gravityValue * Time.deltaTime;
    controller.Move(playerVelocity * Time.deltaTime);

    
}
#区域变量
[序列化字段]
私人浮动播放器速度=2.0f;
[序列化字段]
专用浮动跳线高度=1.0f;
[序列化字段]
私人浮动重力值=-9.81f;
[序列化字段]
专用浮子旋转速度=0.1f;
私有浮动旋转速度;
私人转换摄影机;
私人转化儿童;
私人玩家playerInput;
专用字符控制器;
私人Vector3游戏城;
私人足球运动员;
#端区
#区域主要方法
私人空间
{
playerInput=新玩家();
控制器=GetComponent();
}
私有void OnEnable()
{
playerInput.Enable();
}
私有无效不可撤销()
{
playerInput.Disable();
}
私有void Start()
{
cameraMain=Camera.main.transform;
child=transform.GetChild(0).transform;
}
无效更新()
{
groundedPlayer=controller.isGrounded;
if(groundedPlayer&&playerVelocity.y<0)
{
playerVelocity.y=0f;
}
Vector2 movementInput=playerInput.PlayerMain.Move.ReadValue();
//Vector3 move=新的Vector3(movementInput.x,0f,movementInput.y);
Vector3 move=(cameraMain.forward*movementInput.y+cameraMain.right*movementInput.x);
移动y=0f;
//controller.Move(Move*Time.deltaTime*playerSpeed);
if(move!=Vector3.zero)
{
float targetAngle=Mathf.Atan2(move.x,move.z)*Mathf.Rad2Deg;
浮动角度=数学平滑阻尼角度(子eulerAngles.y、目标角度、参考旋转速度、旋转速度);
child.rotation=四元数.Euler(0f,角度,0f);
controller.Move(Move*Time.deltaTime*playerSpeed);
}
//更改玩家的高度位置。。
如果(playerInput.PlayerMain.Jump.triggered&&groundedPlayer)
{
playerVelocity.y+=数学Sqrt(跳跃高度*-3.0f*重力值);
}
playerVelocity.y+=重力值*时间.deltaTime;
控制器移动(playerVelocity*Time.deltaTime);
}
以上是最近从youtube教程中学到的播放器控制器代码。下面是gamepad的输入动作图和游戏对象:


您只需在新的输入管理器中使用触摸屏(delta)和拖动图像管理输入的勾选功能,即可解决此问题。

您能否在此回答中提供更多细节?一个代码示例或基本原理会很好。谢谢您的回复。我同意上面的评论,因为我需要更多的理解。我试着把它换成触摸屏(delta),但当我试着移动相机时,它只是产生了一个不平稳的运动