跳跃时改变角色方向

时间:2013-04-21 15:23:34

标签: c# unity3d

我正在制作2D平台游戏,我按照教程来构建我的角色。这个角色工作得很好,除了跳跃时,它不允许改变空中方向。我如何添加到这个以使我的角色能够在跳跃中改变方向?

用于基本动作的代码如下:

void Update()
{

    CharacterController controller = GetComponent<CharacterController>();
    float rotation = Input.GetAxis("Horizontal");
    if(controller.isGrounded)
    {
        moveDirection.Set(rotation, 0, 0);
        moveDirection = transform.TransformDirection(moveDirection);

        //running code
        if(Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) //check if shift is held
        { running = true; }
        else
        { running = false; }

        moveDirection *= running ? runningSpeed : walkingSpeed; //set speed

        //jump code
        if(Input.GetButtonDown("Jump"))
        {
            jump();
        }
    }

    moveDirection.y -= gravity * Time.deltaTime;

    controller.Move(moveDirection * Time.deltaTime);


}
编辑:忘记包含jump()的代码,这可能很重要......

 void jump()
{
    moveDirection.y=jumpHeight;
    transform.parent=null;
}

1 个答案:

答案 0 :(得分:0)

仅在角色接地时才更新moveDirection向量:

if(controller.isGrounded)

当玩家跳转isGrounded设置为false时,moveDirection将不会更新(重力除外)。

我想你不想在跳跃时影响角色的速度(除非它应该飞行或在空中行走)。我想你想在它跳跃时改变它的方向,所以你可以直接修改变换,使它根据你的输入进行旋转。

类似的东西:

else
{
   float amountOfRotation = Input.GetAxis("...") * rotationScaleFactor; 
   transform.RotateAround(transform.position, transform.up, Time.deltaTime * amountOfRotation);
}

修改

我从未使用过它,但我认为CharacterController只是在对象接地时才移动。因此,如果您想在播出时移动它,请不要使用Move方法,而是直接编辑GameObject的转换:

else
{
   float additionalForwardSpeed = Input.GetAxis("...") * speedScaleFactor;  
   transform.Translate(transform.forward * Time.deltaTime * additionalForwardSpeed ); //translate
}

上面的代码应该提高对象在本地前进方向的速度。