Поверните положение в соответствии с вперед - PullRequest
0 голосов
/ 23 февраля 2019

В настоящее время я делаю систему обнаружения лазания, которая следит за игроком вокруг и определяет ближайшую точку, на которую игрок может подняться.У меня есть игровой объект, который излучает лучи в соответствии с положением игроков.Лучи движутся вместе с игроком, но не вращаются вокруг.Как я могу заставить их вращаться вместе с плеером?

Screenshot

Это код, который рисует лучи

void Update()
{
    //Debug.DrawRay();
    raySpace = surfaceWidth / definition;
    raySpaceDividedByTwo = raySpace / 2;
    surfaceWidthDividedByTwo = surfaceWidth / 2;

    for (int i = 0; i < definition; i++)
    {
        for (int y = 0; y < definition; y++)
        {
            raycastCoordinates = new Vector3(
                (this.transform.position.x + (i * raySpace) + raySpaceDividedByTwo) - surfaceWidthDividedByTwo,
                 this.transform.position.y,
                (this.transform.position.z + (y * raySpace) + raySpaceDividedByTwo) - surfaceWidthDividedByTwo);

            //offset = Quaternion.AngleAxis(Input.GetAxis("Mouse X") * turnSpeed, Vector3.up) * offset;
            //raycastCoordinates = Quaternion.AngleAxis(this.transform.rotation.y, Vector3.up) * raycastCoordinates;

            raycastUpHitsList.Add(Physics.RaycastAll(raycastCoordinates, Vector3.up, detectionHeight, LayerMask.GetMask("Water")));
            Debug.DrawRay(raycastCoordinates, Vector3.up * detectionHeight, Color.green, 0.1f);
        }
    }
}

1 Ответ

0 голосов
/ 23 февраля 2019

Это должно работать:

void Update()
{
    //Debug.DrawRay();
    raySpace = surfaceWidth / definition;
    raySpaceDividedByTwo = raySpace / 2;
    surfaceWidthDividedByTwo = surfaceWidth / 2;

    for (int i = 0; i < definition; i++)
    {
        for (int y = 0; y < definition; y++)
        {
            raycastCoordinates = new Vector3(
                (this.transform.position.x + (i * raySpace) + raySpaceDividedByTwo) - surfaceWidthDividedByTwo,
                 this.transform.position.y,
                (this.transform.position.z + (y * raySpace) + raySpaceDividedByTwo) - surfaceWidthDividedByTwo) * transform.forward;//if this doesn't work, try transform.right instead

            //offset = Quaternion.AngleAxis(Input.GetAxis("Mouse X") * turnSpeed, Vector3.up) * offset;
            //raycastCoordinates = Quaternion.AngleAxis(this.transform.rotation.y, Vector3.up) * raycastCoordinates;

            raycastUpHitsList.Add(Physics.RaycastAll(raycastCoordinates, Vector3.up, detectionHeight, LayerMask.GetMask("Water")));
            Debug.DrawRay(raycastCoordinates, Vector3.up * detectionHeight, Color.green, 0.1f);
        }
    }
}
...