【问题标题】:Unity Collider Button is not working on AndroidUnity Collider Button 在 Android 上不起作用
【发布时间】:2017-10-26 08:08:12
【问题描述】:

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

Video showing desired effect.

这是我的脚本:

#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;  
}

【问题讨论】:

    标签: android button unity3d unityscript collider


    【解决方案1】:

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

    简单地说,OnMouseDown doesn't work on mobile

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

    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 脚本将再次开始工作。

    【讨论】:

    • 从 JS 切换到 C# 很简单:您已经在使用 #Pragma strict,所以您只需将 var xxx : Type 更改为 Type xxx 和您的 for 循环以使用 @987654330 @ 而不是 :
    • 谢谢你的脚本解释,你的救命稻草:*
    • @AndreMatiun 不要忘记投票并将我的答案标记为已接受(绿色复选标记)。 :)
    • OP 的代表并没有太多需要投票的地方,但可以accept 回答,如果问题得到解决,应该回答。请注意,现在很少有地方应该使用Physics.Raycast 来检测对象的点击,否则 OP 会遇到点击通过 UI 和点击 GameObjects 的问题。新的EventSystem 应该用于 Unity 4.5 及更高版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    相关资源
    最近更新 更多