0

我有一个碰撞器按钮的问题:当我在 PC 上使用该按钮时它工作正常,但是当我在移动设备上使用它时,脚本不起作用(但碰撞器应该产生淡入淡出效果)。

显示所需效果的视频

这是我的脚本:

#pragma strict

function OnMouseDown(){
    GameObject.FindWithTag("MainCamera").GetComponent(orbit).mainMenu = false;  
    for (var child : Transform in GameObject.Find("logo").transform) {
        child.gameObject.active = false;    
    }
    var enemy:GameObject[] = GameObject.FindGameObjectsWithTag("enemy");
    for (var child3 : GameObject in enemy) {
        Destroy(child3);
    }

    for (var child : Transform in GameObject.Find("menu_main").transform) {
        child.gameObject.active = false;    
    }   

    var num:GameObject[] = GameObject.FindGameObjectsWithTag("num");
    for (var child2 : GameObject in num) {
        Destroy(child2);
    }

    for (var child : Transform in GameObject.Find("menu_end").transform) {
        child.gameObject.active = false;    
    }   

    for (var child : Transform in GameObject.Find("healthbar").transform) {
        child.gameObject.active = true; 
    }   
    GameObject.Find("_Game").GetComponent(game).score = 0;  
}
4

1 回答 1

2

所以你的问题归结为非常简单的事情。虽然触摸事件类似于鼠标事件,并且在很多方面它们的处理方式相同,但这是它们不同的情况之一。

简而言之,OnMouseDown不能在手机上运行

那里的答案有一个过时的链接(并且包含一个错字),这里应该指向:

http://wiki.unity3d.com/index.php/OnMouseDown

以及相关代码(在您正在使用的 JS/UnityScript 中,虽然我建议切换到 C#,但相对来说比较轻松):

function Update () {
    // Code for OnMouseDown in the iPhone. Unquote to test.
    var hit : RaycastHit;
    for (var i = 0; i < Input.touchCount; ++i) {
        if (Input.GetTouch(i).phase == TouchPhase.Began) {
        // Construct a ray from the current touch coordinates
        var ray = camera.ScreenPointToRay (Input.GetTouch(i).position);
        if (Physics.Raycast (ray,hit)) {
            hit.transform.gameObject.SendMessage("OnMouseDown");
          }
       }
   }
}

只需将带有此功能的新脚本附加到主摄像机,就可以了。您现有的 OnMouseDown 脚本将再次开始工作。

于 2017-05-25T15:51:03.370 回答