如何检测游戏对象上的触摸

时间:2014-01-28 15:19:59

标签: ios touch unity3d unityscript

我正在使用Unity for iOS设备开发游戏。我已经实现了以下触摸代码:

void Update () {
    ApplyForce ();
}

void ApplyForce() {

    if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Began) {
        Debug.Log("Touch Occured");     
    }
}

我已将此脚本拖到我的游戏对象上,这是一个球体。但无论我触摸哪里,都会显示日志消息。我只想在用户触摸对象时检测触摸。

2 个答案:

答案 0 :(得分:16)

将代码粘贴在相机中,或其他会在您设计的级别中保留的代码。它可以是任何东西,甚至是空的游戏对象。唯一重要的是它只在您的关卡中存在ONCE,否则您将同时运行多个触摸检查,这将导致系统负载严重。

void Update () {
    if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Began) 
    {
        Ray ray = Camera.main.ScreenPointToRay( Input.GetTouch(0).position );
        RaycastHit hit;

        if ( Physics.Raycast(ray, out hit) && hit.transform.gameObject.Name == "myGameObjectName")
        {
            hit.GetComponent<TouchObjectScript>().ApplyForce();  
        }
    }
}

在上面的脚本中,hit.transform.gameObject.Name == "myGameObjectName"可以替换为您要检查由光线投射命中的对象是您要对其施加力的对象的任何其他方法。一个简单的方法是使用标签,例如。

要记住的另一件事是,光线投射将来自您的相机(相对于手指触摸的位置)并使用对撞机击中第一个物体。因此,如果您的对象隐藏在其他内容之后,您将无法触及它。

还将脚本放在您的触摸对象中(在此示例中,称为TouchObjectScript.cs)

void Update () {
}

public void ApplyForce() {

        Debug.Log("Touch Occured");   
}

如果有什么不清楚,或者您需要任何进一步的帮助,请发表评论,我会回复您。

答案 1 :(得分:2)

最好的方法就是添加:

void OnMouseDown () {}

到想要点击的游戏对象。 这个问题是你不能同时按下2件事。