玩家移动时,相机控制器无法正常工作。跳到

时间:2017-01-31 18:26:23

标签: c# controller camera character unity5

[编辑]由于其他问题而更改了标题。

每当玩家移动时,它会移动弧线。每当玩家跳跃时,相机控制器首先放大,然后缩小以尝试固定其位置。我希望它在跳跃时保持缩小状态(只是意识到这个问题可能变得多么巨大......“除非碰撞或干扰其视图与其他物体”)。我也希望它能够正确地移动。 (仅通过移动而没有与相机脚本相关的额外代码行完美)

我的播放器控制器是Unity Documentation的default character controller脚本。我的相机控制器基于youtube video。我知道为什么它会造成麻烦,因为我使用的角色控制器与使用的教程不同,但这是因为他的角色控制器不适用于我的角色控制器。所以我正在尝试修复默认字符控制器。

[编辑]在查看脚本一段时间之后,我能够将其缩小到一个可能的罪魁祸首。

Vector3 camVel = Vector3.zero;

void MoveToTarget()
{
    targetPos = target.position + position.targetPosOffset;
    destination = Quaternion.Euler (orbit.xRotation, orbit.yRotation + target.eulerAngles.y, 0) * -Vector3.forward * position.distanceFromTarget;
    destination += targetPos;

    if (collision.colliding) 
    {
        ////from here
        adjustedDestination = Quaternion.Euler (orbit.xRotation, orbit.yRotation + target.eulerAngles.y, 0) * Vector3.forward * position.adjustmentDistance;
        adjustedDestination += targetPos;

        if (position.smoothFollow)
        {
            //use smooth damp function
            ////to here makes weird behavior. Found out with debug.log line.
            transform.position = Vector3.SmoothDamp(transform.position, adjustedDestination, ref camVel, position.smooth);
        }
        else
            transform.position = adjustedDestination;
    } 
    else 
    {
        if (position.smoothFollow) 
        {
            //use smooth damp function                
            transform.position = Vector3.SmoothDamp(transform.position, destination, ref camVel, position.smooth);
        }  
        else
            transform.position = destination;
    }
}

target正在从TPController获取引用,TPController是下面的字符控制器。虽然我仍然不明白为什么会这样(在教程视频中没有发生)。除非......我的角色控制器以某种方式干扰相机控制器。

public Quaternion TargetRotation
{
    get { return targetRotation; }
}

void Start() {
    targetRotation = transform.rotation;
}

void Update() {
    Movement ();
    Turn ();
}

void Movement()
{
    CharacterController controller = GetComponent<CharacterController>();
    if (controller.isGrounded) {
        moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        moveDirection = transform.TransformDirection(moveDirection);
        moveDirection *= speed;
        if (Input.GetButton("Jump"))
            moveDirection.y = jumpSpeed;

    }
    moveDirection.y -= gravity * Time.deltaTime;
    controller.Move(moveDirection * Time.deltaTime);
}

void Turn() 
{
    if (Mathf.Abs (Input.GetAxis("Horizontal")) > inputDelay) 
    {
        targetRotation *= Quaternion.AngleAxis (rotateVel * Input.GetAxis("Horizontal") * Time.deltaTime, Vector3.up);
    }
    transform.rotation = targetRotation;
}

禁用Turn()允许角色移动而不绘制弧线。但随着角色转动,相机不会转身。 /// 此弧移动部分已解决 - 将其留待此处以备将来参考,以防任何人尝试类似的方法:在

部分
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

输入0而不是Input.GetAxis(“Horizo​​ntal”)。应该能够在没有画弧的情况下移动。

提前感谢您的帮助。

0 个答案:

没有答案