Unity Cant同时跳跃并移动

时间:2014-11-11 09:37:24

标签: c# unity3d

您好,感谢您阅读本文。

我在Unity制作了一个小游戏,我终于得到了带触摸输入的移动控件。

但是现在我在运动和跳跃部分的组合方面遇到了一些问题。如果我在移动,我就不能跳,但如果我跳,我就可以移动。

我的每个箭头键都包含一个脚本,然后调用“RobotController”脚本开始移动。

ArrowRight和ArrowLeft脚本。它们看起来非常相似所以我只会发布1:

private RobotController PlayermoveRight;

// Use this for initialization
void Start () {
    PlayermoveRight = GameObject.Find("Player").GetComponent<RobotController>();
}

void OnMouseOver()
{

    if(Input.touchCount >= 1) 
    { 
        var touchr = Input.touches[0];
        if(touchr.phase != TouchPhase.Ended && touchr.phase != TouchPhase.Canceled)
        {
            PlayermoveRight.MoveRight();
        }
        else
        {

        }
    }
}

ArrowUp脚本:

void OnMouseOver()
{
    GameObject Go = GameObject.Find("Player");
    if ((Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) || (Input.GetMouseButtonDown(0))) 
    {
        Go.GetComponent<RobotController>().Jump();
    }
}

RobotController脚本:

public double moveTime = 0.1;
public double moveTimeR = 0.1;
private double lastPressedTime = 0.0;
private double PressRight = 0.0;

public void MoveLeft() // If ArrowLeft is clicked or Pressed
{
    lastPressedTime = Time.timeSinceLevelLoad; 
}

public void MoveRight() // If ArrowRight is clicked or Pressed
{
    PressRight = Time.timeSinceLevelLoad;
}



void FixedUpdate () {


    if (PressRight + moveTimeR > Time.timeSinceLevelLoad) 
    {
        rigidbody2D.velocity = new Vector2 (maxSpeed, rigidbody2D.velocity.y);
    } 
    else if (lastPressedTime + moveTime > Time.timeSinceLevelLoad) 
    {
        rigidbody2D.velocity = new Vector2 (maxSpeed - maxSpeed - maxSpeed, rigidbody2D.velocity.y);

    }
    else 
    {
        rigidbody2D.velocity = new Vector2(0.0f, rigidbody2D.velocity.y);
    }

}

public void Jump()
{
    if (isOnGround == true) {
        anim.SetBool("Ground",false);
        rigidbody2D.AddForce (new Vector2 (0, jumpForce));
    }
}

我怎么能这样做,我可以同时跳跃和移动。?

2 个答案:

答案 0 :(得分:3)

从向上箭头代码:

(Input.GetTouch(0).phase == TouchPhase.Began) || (Input.GetMouseButtonDown(0))

你正在检查第一次触摸是否刚刚开始,如果你按住一个移动箭头然后你点击跳跃“跳跃触摸”不是第一次触摸和第一次触摸(对于运动)isn它已经开始阶段了。

它与跳跃然后移动一起工作的原因是因为在这种情况下的第一次触摸是跳跃触摸(巧合而不是代码)。

你不想在这里检查第一次触摸,你想检查上箭头上的触摸。

(不确定你是怎么做到这一点的,但是在我得到50个代表之前我无法发表评论:()

答案 1 :(得分:1)

我也是一个新手,几个小时前就遇到了这个问题,但我修理了它,因为我被告知要在视频教程中做,所以解决方法是:添加一些拖动到你的播放器,在检查器中有一个“线性拖动“rigidBody组件中的选项增加0.3(0是默认值)这真正解决了我的问题我希望它也会帮助你(我知道它已经很晚了,但我在谷歌上搜索我的问题时发现了你的问题)。