Android 如果单击屏幕上的任何位置,Unity Call Touch可在3d文本上运行。而不是只点击文本

Android 如果单击屏幕上的任何位置,Unity Call Touch可在3d文本上运行。而不是只点击文本,android,touch,unity3d,Android,Touch,Unity3d,我不熟悉团结。我遵循汽车教程,并试图将其移植到Android。一些关于我如何在设备中移动汽车的信息。问题是,我使用的是一个三维文本将被点击加速汽车。我所做的是 创建了一个3D文本。添加了长方体碰撞器。选中“长方体碰撞器”的“是触发器”选项。添加了以下脚本 public var Mainref:TouchPlaneScript; function FixedUpdate() { var touch: Touch = Input.touches[0]; if(touch.pha

我不熟悉团结。我遵循汽车教程,并试图将其移植到Android。一些关于我如何在设备中移动汽车的信息。问题是,我使用的是一个三维文本将被点击加速汽车。我所做的是

创建了一个3D文本。添加了长方体碰撞器。选中“长方体碰撞器”的“是触发器”选项。添加了以下脚本

 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");
  }
触摸方法内部的逻辑可能是错误的,不用担心。在设备上运行鼠标功能时,我也对其代码进行了注释。但问题依然存在

问题在于如果在屏幕上任何我希望仅在单击文本时调用触摸功能的地方触摸,则会调用触摸方法


请注意,我在现场有四个按钮。左、右、制动、加速都是3d文本,具有相同的结构和相同的问题。

您应该在Unity中查看Raycast,以确保3d文本接触良好


您可以在“移动输入”部分查看,您应该查看Unity中的Raycast,以确保3D文本接触良好


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

void FixedUpdate()
{
if(Application.platform==RuntimePlatform.IPhonePlayer||
Application.platform==RuntimePlatform.Android)
{

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

void FixedUpdate()
{
if(Application.platform==RuntimePlatform.IPhonePlayer||
Application.platform==RuntimePlatform.Android)
{

如果(Input.touchCount)我在那里找不到我的问题的任何解决方案。你能帮我写一段代码吗?我在那里找不到我的问题的任何解决方案。你能帮我写一段代码吗?将上面的脚本附加到哪里?我应该将它附加到3D文本还是其他地方?上面的代码不起作用:(if语句中的条件未运行:(请帮助您将此脚本列表附加到其他位置,并确保场景中只有一个实例。关于无法工作的问题:我认为您正在计算机上测试此脚本,而不是在移动设备上;因此问题是,计算机上没有触摸输入,您必须检测鼠标单击事件。我将编辑ans记住创建一个包含函数void OnClick()的新脚本,并将此脚本附加到每个附加了框碰撞器的3D文本。然后,如果您单击3D文本,将调用OnClick函数。顺便说一下,如果您有多个3D文本,并且需要它们以不同的方式响应,则需要多个带有OnClick函数的scipt并将它们附加到不同的3D文本。有关详细信息,我认为您应该尝试通过搜索来阅读Unity脚本参考:1.输入2.发送消息3.Raycast;祝您度过愉快的一天,并为回复延迟感到抱歉在何处附加上述脚本?我应该将其附加到3D文本还是其他地方?上述代码不起作用:(if语句中的条件未运行:(请帮助您将此脚本列表附加到其他位置,并确保场景中只有一个实例。关于无法工作的问题:我认为您正在计算机上测试此脚本,而不是在移动设备上;因此问题是,计算机上没有触摸输入,您必须检测鼠标单击事件。我将编辑ans记住创建一个包含函数void OnClick()的新脚本,并将此脚本附加到每个附加了框碰撞器的3D文本。然后,如果您单击3D文本,将调用OnClick函数。顺便说一下,如果您有多个3D文本,并且需要它们以不同的方式响应,则需要多个带有OnClick函数的scipt并将它们附加到不同的3D文本。有关详细信息,我认为您应该尝试通过搜索阅读Unity脚本参考:1.Input 2.SendMessage 3.Raycast;祝您有一个愉快的一天,并为延迟回复感到抱歉
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);
        }
    }