[编辑]由于其他问题而更改了标题。
每当玩家移动时,它会移动弧线。每当玩家跳跃时,相机控制器首先放大,然后缩小以尝试固定其位置。我希望它在跳跃时保持缩小状态(只是意识到这个问题可能变得多么巨大......“除非碰撞或干扰其视图与其他物体”)。我也希望它能够正确地移动。 (仅通过移动而没有与相机脚本相关的额外代码行完美)
我的播放器控制器是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(“Horizontal”)。应该能够在没有画弧的情况下移动。
提前感谢您的帮助。