当角色碰撞器与立方体对撞机碰撞时,ThirdPersonController移动口吃?

时间:2017-12-04 23:48:18

标签: c# unity3d unity5

我正在尝试将玩家1.5距离移动到他面对的玩家方向。 立方体刻度是1,1,1所以我猜测在玩家应该在立方体之间落下这是另一个要解决的问题我可以使立方体在Y上缩放为0.1。

但问题是现在的问题是球员开始向前移动,但随后他陷入空中口吃。

private void MovePlayer(float speed)
    {
        player.position += player.forward * Time.deltaTime * speed;
    }

    private void Update()
    {
        Vector3 newPos = new Vector3(player.position.x + 1.5f, player.position.y, player.position.z);
        MovePlayer(1f);
    }

stuttering

当游戏开始运行时,玩家会一直保持口吃,因为他试图继续前进,但却被碰撞器卡住了。

另一个相关的问题是,在许多情况下,玩家在空中并且看起来像坐在立方体上。只有当我用他正站立的钥匙移动玩家时才会这样。

1 个答案:

答案 0 :(得分:1)

有两个可能的问题。

1 。您没有停用ThirdPersonUserControl脚本。请注意,ThirdPersonUserControl脚本附加到ThirdPersonController GameObject。您必须禁用它,否则您将同时从两个脚本移动播放器。

enter image description here

2 ThirdPersonController使用Rigidbody。不要使用转换(Rigidbody)移动player.position对象。您必须使用其中一个Rigidbody的功能,例如MovePositionAddForcethis帖子中描述的速度。

由于这是ThirdPersonController,因此您不应直接修改Rigidbody。使用在那里声明的Move函数移动它。您可以将新位置传递给第一个参数,然后将值分别压缩并跳转到第二个和第三个参数。这必须在FixedUpdate更新中完成。

正确移动ThirdPersonCharacter对象的示例:

ThirdPersonCharacter tpsScript;

void Start()
{
    GameObject tpsObj = GameObject.Find("ThirdPersonController");
    tpsScript = tpsObj.GetComponent<ThirdPersonCharacter>();
}

void FixedUpdate()
{

    float h = CrossPlatformInputManager.GetAxis("Horizontal");
    float v = CrossPlatformInputManager.GetAxis("Vertical");

    Transform m_Cam = Camera.main.transform;
    Vector3 m_CamForward = Vector3.Scale(m_Cam.forward, new Vector3(1, 0, 1)).normalized;
    Vector3 m_Move = v * m_CamForward + h * m_Cam.right;

    tpsScript.Move(m_Move, false, false);
}