如果在屏幕上的任何位置单击,则Unity呼叫触摸三维文本上的功能.而不是仅单击文本

Jaw*_*jad 1 android touch unity-game-engine

我是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");
  }
Run Code Online (Sandbox Code Playgroud)

Touch Method中的逻辑可能是错误的,不用担心.我还在设备上运行它时评论了鼠标功能的代码.但问题仍然存在.

问题是触摸方法如果在屏幕上触摸,如果我想要触及仅在点击文本时要求的功能的话.

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

Nic*_*Dai 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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助.

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