随时间更改哪个对象按钮控件

时间:2019-03-21 21:31:21

标签: c# user-interface unity3d button

我正在制作一个游戏,其中玩家只能旋转他们站立的当前图块。我正在使用OnCollisionStay和Input.horizo​​ntal和Vertical来实现此目的。它可以很好地与键盘配合使用,但我的目标是使其成为移动设备。

我的问题是,当播放器移动时,如何使UI按钮控制不同的图块。因此,基本上我需要在玩家移至下一个图块时切换按钮所控制的图块。希望这是有道理的。现在,每个图块都有自己的脚本。我在下面包括了其中之一。

谢谢!

void OnCollisionStay(Collision collision)
{
  if (collision.gameObject.tag == "Player")
  {
      float rotateright = Input.GetAxis("Horizontal") * rotatespeed;
    float rotateleft = Input.GetAxis("Vertical") * rotatespeed;

    transform.Rotate(0, rotateright, 0);
    transform.Rotate(rotateleft, 0, 0);
  }
}

1 个答案:

答案 0 :(得分:0)

使用OnCollisionStay来实现这种功能并不理想。

例如,如果您的角色对象同时重叠两个碰撞器,则它将同时旋转两个碰撞器,从而导致各种空间混乱。

一个更好的主意是将当前图块存储在一个公共的类范围变量中,并通过一个单独的函数对其进行操作。然后,您可以使用OnCollisionEnter来检查何时输入了新的图块。

示例:

GameObject currentTile;

void Update (){

    ControlCheck();

}

public void ControlCheck(){

    if (currentTile != null){

        // Rotation code goes here

    }

}

void OnCollisionEnter(Collision obj){

    currentTile = obj.transform.gameObject;

}