Страница 1 из 1

Physics.SphereCast

СообщениеДобавлено: 25 апр 2018, 10:02
bilol@leeching.net
Как считается нормаль RaycastHit.normal, которую выдает Physics.SphereCast?
В частности мне интересно как она считается, если мы ищем пересечение с кубом, у которого нету поворотов по осям.
Если сфера пересекает только одну грань, то искомая нормаль это перпендикуляр к любой точке этой грани. (Нормаль на верхнем рисунке равна (0, 0 , -1))
Если же сфера пересекает две грани, то как считается эта нормаль?(Нормаль на нижнем рисунке равна (-0.3, 0, -1)).
Изображение
Изображение

Re: Physics.SphereCast

СообщениеДобавлено: 25 апр 2018, 10:42
IDoNotExist
bilol@leeching.net писал(а):Если же сфера пересекает две грани, то как считается эта нормаль?(Нормаль на нижнем рисунке равна (-0.3, 0, -1)).

Она не пересекает две грани, а ударяется в первую грань, ваше Gizmo некорректно отображает суть сфера каста, он "кидает" сферу из определённой позиции в определённом направлении, и возвращает данные первой поверхности в которую ударяется сфера.

Re: Physics.SphereCast

СообщениеДобавлено: 25 апр 2018, 11:21
bilol@leeching.net
IDoNotExist писал(а):Она не пересекает две грани, а ударяется в первую грань, ваше Gizmo некорректно отображает суть сфера каста, он "кидает" сферу из определённой позиции в определённом направлении, и возвращает данные первой поверхности в которую ударяется сфера.

То есть мне должна вернуться одна из этих боковых граней? И ее нормаль будет или(-1,0, 0) или (0, 0, -1)?
То значение, которое отображается в дебаге я получаю вызовом Physics.SphereCast и он возвращает (-0.3, 0, -1). Нормаль какой поверхности он тогда возвращает?

Re: Physics.SphereCast

СообщениеДобавлено: 25 апр 2018, 11:28
IDoNotExist
bilol@leeching.net писал(а):То значение, которое отображается в дебаге я получаю вызовом Physics.SphereCast и он возвращает (-0.3, 0, -1). Нормаль какой поверхности он тогда возвращает?

Показывай код, что и как возвращаешь, (-0.3, 0, -1) - это не нормаль, а какая то ерунда.

Re: Physics.SphereCast

СообщениеДобавлено: 25 апр 2018, 11:58
bilol@leeching.net
IDoNotExist писал(а):Показывай код, что и как возвращаешь, (-0.3, 0, -1) - это не нормаль, а какая то ерунда.

Ниже код, если нужен весь проект то здесь https://ru.files.fm/u/25svzdf4. Хотя на сцене только куб и сфера с коллайдерами
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Raycast : MonoBehaviour {

    float radius = 1f;
    float distance = 10f;

    // Use this for initialization
    void Start () {
               
        }
       
        // Update is called once per frame
        void Update ()
    {
        Ray ray = new Ray(transform.position, transform.forward);
        RaycastHit hitInfo;

        bool result = Physics.SphereCast(ray, radius, out hitInfo, distance);

        if (result)
        {
            Debug.Log(hitInfo.normal);
        }
    }
}
 

Re: Physics.SphereCast

СообщениеДобавлено: 25 апр 2018, 12:25
waruiyume
Видимо это направление из точки касания в центр сферы, расположенной так, чтобы она касалась этой точки.
https://yadi.sk/i/DGXKFFxx3UkkCS

Re: Physics.SphereCast

СообщениеДобавлено: 25 апр 2018, 12:42
IDoNotExist
waruiyume писал(а):Видимо это направление из точки касания в центр сферы, расположенной так, чтобы она касалась этой точки.
https://yadi.sk/i/DGXKFFxx3UkkCS

Да, точно, сфера же ударяется в ребро куба, что по картинке сразу не понятно.
ТС, сделай так:
Синтаксис:
Используется csharp
        if (result)
        {
            Debug.Log(hitInfo.normal);
            Debug.DrawRay(hitInfo.point, hitInfo.normal);
        }
 

и сразу всё поймёшь.

Re: Physics.SphereCast

СообщениеДобавлено: 25 апр 2018, 12:47
bilol@leeching.net
Теперь понятно. Спасибо!