Unity3D检查一个点是否在游戏对象内

时间:2016-01-31 19:29:28

标签: android unity3d

我试图在Unity中检查一个点(触摸的x位置,触摸的y位置)是否在创建的游戏对象内(矩形),如果是,则启动并旋转它。

我对Unity很新,但我自己尝试过,这就是

    Rigidbody rb;
    float x, y;
    MeshCollider col;
    Vector3 v;
    bool bo = true;
    // Use this for initialization
    void Start()
    {
        rb = GetComponent<Rigidbody>();
        col = rb.GetComponent<MeshCollider>();
    }
void Update()
{
    if (bo != true)
        rb.transform.Rotate(Vector3.back, Time.deltaTime * 200, Space.World);
    if (Input.touchCount == 1)
    {
        x = Input.GetTouch(0).position.x;
        y = Input.GetTouch(0).position.y;
        Debug.Log(x + "DOTS " + y);
        v = new Vector3(x, y, 0);
        if (col.bounds.Contains(v))
            bo = false;
    }

}

我的控制台没有显示任何内容,如果我输入Debug.Log("HELLO");并且我几乎无法检查自己,所以这几乎是我的代码,感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我认为由于您在PC上而不是在移动设备上进行测试,因此您无法获取日志。

为了检查触摸点是否在gameObject的范围内,从相机发射光线:

#if UNITY_EDITOR
        if(Input.GetMouseButtonUp(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
#else
        if(Input.touches.Length == 1 && Input.touches[0].phase == TouchPhase.Ended)
        {
            Ray ray =  Camera.main.ScreenPointToRay(Input.touches[0].position);
#endif

            int layerMask = (1 << YOUR_TARGET_LAYER_ID);
            RaycastHit[] hits = Physics.RaycastAll(ray, 100f, layerMask);

            foreach(RaycastHit hit in hits)
            {
                if(hit.collider == col)
                {
                    Debug.Log("Bingo!!");
                    break;
                }
            }
        }

请注意,我使用预编译器指令使此代码可以在移动设备和PC上运行。

YOUR_TARGET_LAYER_ID 是您希望仅对光线投射进行转贴的目标的图层ID。这将确保如果某个其他对象覆盖目标,它将被忽略。