Как определить попадание слоя в луч с помощью Physics2d.raycast - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь сделать строительный аспект игры, который я делаю в единстве, используя c #. Мне нужно определить, строю ли я определенный слой.

Я пытался редактировать код ниже несколько раз, но не могу найти проблему. Я также посмотрел несколько видео, которые объясняют, что мой код должен работать, но, возможно, я просто не вижу что-то. Любая помощь будет великолепна.

Вот код, который у меня есть для определения слоя:

[SerializeField]
private LayerMask weaponNoBuildLayer;
[SerializeField]
private LayerMask pathNoBuildLayer;

private bool buildBlocked = false;

private GameObject blockTemplate;

        blockTemplate.transform.position = new Vector2(newPosx, newPosy);

        RaycastHit2D rayHit;
        if(currentBlock.isWeapon == true)
        {
            rayHit = Physics2D.Raycast(blockTemplate.transform.position, Vector2.zero, Mathf.Infinity, weaponNoBuildLayer);
        }
        else
        {
            rayHit = Physics2D.Raycast(blockTemplate.transform.position, Vector2.zero, Mathf.Infinity, pathNoBuildLayer);
        }
        if(rayHit.collider != null)
        {
            Debug.Log("yh");
            buildBlocked = true;
        }
        else
        {
            buildBlocked = false;
        }

Что нужно сделать, так это установить для Boolean buildBlocked значение true, если луч сталкивается с определенными слоями (в дальнейшем в коде в качестве маски слоя), но это не так, а buildBlocked постоянно имеет значение false. Опять же, любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 27 апреля 2019

С https://docs.unity3d.com/ScriptReference/Physics.Raycast.html

// Bit shift the index of the layer (8) to get a bit mask
        int layerMask = 1 << 8;

        // This would cast rays only against colliders in layer 8.
        // But instead we want to collide against everything except layer 8. The ~ operator does this, it inverts a bitmask.
        layerMask = ~layerMask;

        RaycastHit hit;
        // Does the ray intersect any objects excluding the player layer
        if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, Mathf.Infinity, layerMask))
        {
            Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * hit.distance, Color.yellow);
            Debug.Log("Did Hit");
        }
        else
        {
            Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * 1000, Color.white);
            Debug.Log("Did not Hit");
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...