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);
}
**我已为游戏对象分配了代码,这些代码可以用作按钮**中的对象
这适用于键盘按钮,我的意思是它在计算机中移动并且我想为Android构建,因此我想在单击按钮时工作,但是当我单击时在按钮上不起作用 我已经将onClick分配给left()和right()
答案 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触发代码,这样,只要您按下按钮,代码就会触发。