如何让我的角色以第三人称绕过相机?

时间:2018-05-10 02:29:50

标签: c# unity3d camera game-development

我正在开发一个第三人称的游戏,我想要实现一种特定的运动,但我甚至无法想象它是如何工作的,更不用说实际编码了。

基本上,当向左或向右按​​住时,我希望玩家绕过相机。可以看到here这样的相机效果。这正是我想要实现的目标。

到目前为止,这是我的机芯和相机代码。我的图像我需要使用相机的Y旋转来实现这一点,但我的测试还没有成功。任何意见都将不胜感激!

运动:

public int speed = 10;
public int rotationSpeed = 10;

public CharacterController cc;
Vector2 input;
Vector3 moveDir;
Vector3 lookDir;

Vector3 forward;
Transform camTransform;

public Transform model;

void Start () {
    cc = GetComponent<CharacterController>();
    camTransform = Camera.main.transform;
}

void GetInput() {
    input.x = Input.GetAxisRaw("Horizontal");
    input.y = Input.GetAxisRaw("Vertical");
}

void CalculateForward()
{

}

void Move()
{
    moveDir.x = input.x;
    moveDir.z = input.y;

    if(moveDir.magnitude > 1)
    {
        moveDir.Normalize();
    }

    Vector3 rotatedDir = Camera.main.transform.TransformDirection(moveDir);
    rotatedDir = new Vector3(rotatedDir.x, 0, rotatedDir.z);
    rotatedDir = rotatedDir.normalized * moveDir.magnitude;

    cc.Move(rotatedDir * speed * Time.deltaTime);
}

void ApplyGravity()
{

}

    void FaceDir()
{
    if (moveDir != Vector3.zero)
    {
            transform.rotation = Quaternion.Slerp(
            transform.rotation,
            Quaternion.LookRotation(-moveDir),
            Time.deltaTime * rotationSpeed
        );
    }
}


private void FixedUpdate()
{
    GetInput();
    //ApplyGravity();
    Move();
    FaceDir();
    ApplyGravity();
}

}

相机:

 [SerializeField]
private float distanceAway;
[SerializeField]
private float distanceUp;
[SerializeField]
private float smooth;
[SerializeField]
private Transform follow;

private Vector3 targetPosition;

private void Start()
{
    follow = GameObject.FindWithTag("Player").transform;
}

private void LateUpdate()
{
    targetPosition = follow.position + follow.up * distanceUp - follow.forward * distanceAway;
    transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * smooth);

    transform.LookAt(follow);
}

1 个答案:

答案 0 :(得分:0)

围绕圆圈的移动总是在与圆相切的方向上,因此每次更新都要:

  • 将播放器的Y旋转设置为直接观察相机的Y轴
  • 向左或向右旋转播放器90度(取决于您想要前进的方向)
  • 将玩家向前移动一段距离,该距离将取决于您希望他们移动的速度

记住它不可能完美地遍历一个圆圈,因为圆圈上有无数个点,但这种方法足够接近它。