有没有办法将这个Unity 2d代码分解为单独的方法

时间:2019-05-20 13:55:26

标签: unity3d touch 2d

我正在尝试使用屏幕上的按钮上下移动梯形图,当前的代码可以与W和S键配合使用,但是我不太确定如何将代码放入单独的方法中,以便触摸可以访问它。

我正在研究从单独的脚本访问播放器和梯子上的对撞机,但他们说这无法完成。我还尝试将Keycode分配给方法中的单独变量,然后将此方法分配给屏幕上的键,但这没有用。

public void OnTriggerStay2D(Collider2D other)
{
    if (other.tag == "Player" && Input.GetKey(KeyCode.W))
    {
        other.GetComponent<Rigidbody2D>().velocity = new Vector2(0, speed);
    }
    else if (other.tag == "Player" && Input.GetKey(KeyCode.S))
    {
        other.GetComponent<Rigidbody2D>().velocity = new Vector2(0, -speed);
    }
    else{
        other.GetComponent<Rigidbody2D>().velocity = new Vector2(0, 1);
    }
}

2 个答案:

答案 0 :(得分:1)

您的问题有点含糊。这可能有助于提供更详细的方案。但是,将其重构为方法以便其他人可以访问它似乎并不那么复杂,除非我误解了您。

public void OnTriggerStay2D(Collider2D other)
{
    RigidBody2D rigidBody2d =  other.GetComponent<Rigidbody2D>();

    if (other.tag == "Player" && Input.GetKey(KeyCode.W))
    {
        SetVelocity(rigidBody2d, 0, speed);
    }
    else if (other.tag == "Player" && Input.GetKey(KeyCode.S))
    {
        SetVelocity(rigidBody2d, 0, -speed);
    }
    else
    {
        SetVelocity(rigidBody2d, 0, 1f);
    }
}

// public, assuming you want to access this from somewhere else. 
public void SetVelocity(Rigidbody2D rigidBody, float horizontalSpeed, float verticalSpeed)
{
    rigidBody.velocity = new Vector2(horizontalSpeed, verticalSpeed);
}

答案 1 :(得分:0)

没有足够的细节来工作,但是,除非我完全误解了您,否则,如果您要做的只是使用屏幕触摸输入而不是键盘输入来移动播放器,那么最简单的方法就是在不改变太多内容的情况下进行操作工作代码将是简单地将布尔变量分配给输入条件并检查它们,而不是检查共享功能中的键盘输入。

因此,例如,该函数将类似于:

    public void OnTriggerStay2D(Collider2D other)
    {
        if (other.tag == "Player" && UpKeyPressed)
        {
            other.GetComponent<Rigidbody2D>().velocity = new Vector2(0, speed);
        }
        else if (other.tag == "Player" && DownKeyPressed)
        {
            other.GetComponent<Rigidbody2D>().velocity = new Vector2(0, -speed);
        }
        else{
            other.GetComponent<Rigidbody2D>().velocity = new Vector2(0, 1);
        }
    }

其中UpKeyPressed和DownKeyPressed是布尔型变量,当您触摸基于屏幕的键或基于触摸的输入的UI时,可以将其设置为true / false。