Physics.Raycast()

时间:2016-11-27 14:00:40

标签: unity3d onclicklistener blender

我对Unity比较新。我正在制作国际象棋游戏。在下面的屏幕截图中,您会看到以下 GameObjects

  1. 3D Planes as the square。
  2. 国际象棋的搅拌机模型。
  3. 目前,这是一个非常基本的脚本,我用它来检测点击的对象并将其删除(稍后会添加更多功能)。

    void Update () {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = mainCamera.GetComponent<Camera>().ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                //highlightPiece(hit.transform.gameObject, whiteSelectedTexture, false);
                Destroy(hit.transform.gameObject);
            }
        }
    }
    

    问题在于Unity的原生游戏对象(制作正方形的平面对象)是由光线投射检测到的,但是混合器模型不是。这是由屏幕截图确认的,因为应该检测到最近的对象。该脚本最终删除了正方形,但没有删除棋子(我实际上计划选择和处理它)。

    enter image description here

1 个答案:

答案 0 :(得分:3)

您确实没有为导入的Blender对象添加Collider

选择每个国际象棋棋子并添加BoxCollider / CapsuleCollider

顺便说一句,我认为你可以移除棋盘的碰撞器。

此外,我强烈建议您在使用光线投影时使用图层,以便更高效。请查看以下Unity文章:https://unity3d.com/fr/learn/tutorials/topics/physics/physics-best-practices