【问题标题】:Unity 2D collisions with prefabs not working on phoneUnity 2D 与预制件的碰撞无法在手机上运行
【发布时间】:2016-04-05 16:33:36
【问题描述】:

当我将手机用作测试设备时,我的 OnTriggerEnter 有点问题。 我有一些触摸代码可以成功地让我在屏幕上拖动对象。 然后我让这些对象与屏幕上的其他对象发生碰撞。

在我将对象变成预制件之前,这一切都很好。 (我需要这样做,因为对象是在运行时随机生成的)

现在,我仍然可以在屏幕上移动对象,但它们不再与其他对象发生碰撞,这些对象也是预制件。但是,在我的笔记本电脑上的统一编辑器中运行它时,它仍然可以正常工作。

我所有的物体上都有碰撞体,触发检查,移动物体有刚体。

触发输入代码

public void OnTriggerEnter(Collider other)
{
    Debug.Log ("here");
    Debug.Log(this.gameObject.tag +"is this");
    Debug.Log(other.gameObject.tag + "is other");
    if (this.gameObject.tag == other.gameObject.tag) 
    {
        Debug.Log("here2)");
        Reftomanager.miniGameScore++;
        Reftomanager.updateScore();
        Destroy(this.gameObject);
    }
}

触摸码

    if (Input.touchCount > 0) 
    {


        Touch touch = Input.GetTouch(0);

        switch(touch.phase)
        {

        case TouchPhase.Began:
                Ray ray = Camera.main.ScreenPointToRay (touch.position);

                if (Physics.Raycast(ray,out hit)) 
                {
                    thisObject = hit.collider.gameObject;
                    touchPos = Camera.main.ScreenToWorldPoint (touch.position);
                    if(thisObject.name!="circle")
                    {
                    draggingMode = true;
                    }
                }


                break;

        case TouchPhase.Moved: 
            if (draggingMode) 
            {
                touchPos = Camera.main.ScreenToWorldPoint (touch.position);
                newCentre = touchPos;
                thisObject.transform.position = touchPos;
            }
            break;


        case TouchPhase.Ended: 

            draggingMode = false;

        break;
        }
    }


}

我完全被难住了,所以任何帮助都会很棒。

谢谢

【问题讨论】:

    标签: android unity3d touch collision-detection


    【解决方案1】:

    最近也遇到了同样的错误。我建议使用

    If(other.gameObject.CompareTag ("YourTagName"))
    

    此外,如果您最近添加了标签或编辑了任何标签,我发现 unity 存在一个错误,即除非您重新启动 unity,否则您的标签不会在您的 android 版本上注册。

    GL。

    【讨论】:

    • 我遇到了和你一样的问题,关闭 Unity,重新打开,构建它并且它工作。非常感谢。对于其他想知道的人,我正在使用 Unity 2018.2.0f
    • 使用 Unity 2019.6f1。添加一些新标签后出现同样的问题。是的,重新启动统一是唯一的选择。谢谢
    【解决方案2】:

    由于您使用 3D 对撞机,您分配给它们的位置是否可能不同? Touch.position 是一个 Vector2,这意味着 ScreenToWorldPoint 将使用 0 表示 z。如果您使用 z 值不是 0 的 Vector3 来获取编辑器中的世界点(独立输入),即使 x 和 y 相同,它也可能为您提供不同的值。

    另一种可能性是,在对象实例化时,代码中的其他地方发生了特定于平台的错误。如果不在同一个 Monobehavior 中,您的运动代码仍然可以正常工作。

    如果您有 Android,可以使用带有 Unity 标签的Android Monitor 来检查错误消息。

    【讨论】:

    • 谢谢罗伯特,原来 Z 值在实例化时被改变了。手动将其更改回 0 有效:)
    • 很高兴听到我能提供帮助! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2021-08-12
    相关资源
    最近更新 更多