1

我是 Unity 的新手。我正在关注汽车教程并尝试将其移植到 Android。我如何设法在设备中移动汽车。问题是我使用的是 3D 文本,点击它可以加速汽车。我所做的是

创建了一个 3D 文本。为它添加了盒子对撞机。检查 Box Collider 的 is Trigger 选项。添加了以下脚本。

 public var Mainref:TouchPlaneScript;

 function FixedUpdate() 
 {

  var touch: Touch = Input.touches[0];

  if(touch.phase == TouchPhase.Began)
  {
     Mainref.applyBrake = true;
  }
  if(touch.phase == TouchPhase.Ended)
  {
     Mainref.applyBrake = false;
  }

}

  function Start () 
  { 
  // Find the OtherScript which is attached to any game object in the scene. 
     Mainref = FindObjectOfType(TouchPlaneScript);
  }

  function OnMouseUp()
  {
    Mainref.applyBrake = false;
    Debug.Log("Stop Brake");
  }
  function OnMouseDown()
  {
    Mainref.applyBrake = true;
    Debug.Log("Apply Brake");
  }

触摸方法内部的逻辑可能是错误的,不要担心。在设备上运行鼠标功能时,我还注释了代码。但问题仍然存在。

问题是,如果触摸屏幕上的任何我想要触摸功能的地方,只有在点击文本时才会调用触摸方法。

请注意,我在场景中有四个按钮。left,right,brake,accel 都是 3d 文本,具有相同的结构和相同的问题。

4

2 回答 2

5

您的代码通过检查输入触摸来检测点击事件,但您没有检查目标的位置,所以一旦您点击屏幕,一切都会发生。您需要检查触摸的位置,以确保您正在执行正确的操作。代码如下(不熟悉JS,这是C#版本,需要自己翻译):

void FixedUpdate ()
{
    if ( Application.platform == RuntimePlatform.IPhonePlayer ||
        Application.platform == RuntimePlatform.Android )
    {
        if ( Input.touchCount <= 0 )
            return;

        // detect single touch only
        Touch touch  = Input.touches[0];

        if ( touch.phase == TouchPhase.Began )
        {
            Debug.Log( 123 );
            OnTouchBegan( touch.position );
        }
    }
    else
    {
        if ( Input.GetMouseButtonDown( 0 ) )
        {
            Debug.Log(Input.mousePosition);
            OnTouchBegan( Input.mousePosition );
        }
    }
}

    void OnTouchBegan (Vector2 screenPos)
    {
        Ray ray = Camera.main.ScreenPointToRay( screenPos );
        RaycastHit hit;

        if ( Physics.Raycast( ray, out hit ) )
        {
            hit.collider.gameObject.SendMessage("OnClick", SendMessageOptions.DontRequireReceiver);
        }
    }

在此之后,您需要创建一个实现 OnClick() 方法的新脚本并将其附加到您的 3D 文本游戏对象上。然后,当您单击它时,您的 3D 文本将收到 OnClick 消息。

希望这可以帮助。

顺便说一句,如果您的场景中有多个摄像头,您需要将 Camera.main 更改为可以看到 3D 文本的摄像头。

于 2013-05-09T08:23:14.583 回答
0

您应该查看 Unity 中的 Raycast,以确保 3D 文本被很好地触动。

您可以在“移动输入”部分查看文档

于 2013-05-08T07:05:09.320 回答