我无法从单击按钮移动播放器

时间:2020-08-29 09:54:02

标签: visual-studio unity3d

void Update()
    {
        isTouchingGround = Physics2D.OverlapCircle (groundCheckPoint.position, groundCheckRadius, groundLayer);
        movement = Input.GetAxis ("Horizontal");
        if (movement > 0f) {
            
            left();
        }
        else if (movement < 0f) {
            right();
        }
        else {
          rigidBody.velocity = new Vector2 (0,rigidBody.velocity.y);
        }
        
    }
public void left()
{

    rigidBody.velocity = new Vector2(movement*speed, rigidBody.velocity.y);
    //rigidBody.AddForce(transform.forward * speed, ForceMode2D.Force);
    transform.localScale = new Vector2(2f, 2f);

}
public void right()
{
    
    rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);
    
    transform.localScale = new Vector2(-2f, 2f);

}

enter image description here

**我已为游戏对象分配了代码,这些代码可以用作按钮**中的对象

这适用于键盘按钮我的意思是它在计算机中移动并且我想为Android构建,因此我想在单击按钮时工作,但是当我单击时在按钮上不起作用 我已经将onClick分配给left()和right()

2 个答案:

答案 0 :(得分:0)

这里的问题是,一旦释放按钮,就会调用UI按钮OnClick()。您需要一些不同的东西才能实现所需的功能。

Unity具有一个称为事件触发器的组件,该组件使您可以处理不同类型的输入。我们将使用它们来解决您的问题。 不幸的是,似乎没有“保持”事件。所以我们会做一些技巧。

首先,让我们编辑您的脚本。 在您的属性上添加以下行:

private bool moveLeft = false;
private bool moveRight = false;

现在添加以下方法:

public void LeftBtnDown()
{
    moveLeft = true;
}
public void LeftBtnUp()
{
    moveLeft = false;
}
public void RightBtnDown()
{
    moveRight = true;
}
public void RightBtnUp()
{
    moveRight = false;
}

要完成此操作,请编辑您的Update()方法

void Update()
{
    // Your prev code here ...
    if(moveLeft) left()
    else if (moveRight) right()
}

注意:按下两个按钮时,使用“ else if”将优先向左移动

让我们移交给统一检查员:

(我们只考虑一个按钮,左侧,为另一个按钮重复该过程) 从按钮中删除实际的onClick事件,然后将新的“事件触发器”组件添加到gameObject中。

->添加新事件类型->指针向下->(按+按钮)->使用脚本拖动您的gameObject->选择LeftBtnDown()

->添加新事件类型->指针向上->(按+按钮)->使用脚本拖动游戏对象->选择LeftBtnUp()

就是这样!现在您的脚本应该可以正常工作了。

答案 1 :(得分:0)

使用Debug.Log("Text");查看您的按钮是否真正在运行代码。可能是您有东西挡住了按钮。为了能够单击该按钮,它必须位于屏幕顶部,而不会阻塞它。可以确保已对该按钮进行了射线广播,并且其上方可能存在的任何东西都已关闭了它的射线广播。考虑使用事件触发器而不是按钮,并通过onPointerDown触发代码,这样,只要您按下按钮,代码就会触发。