Physics.SphereCast

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Physics.SphereCast

Сообщение bilol@leeching.net 25 апр 2018, 10:02

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

Re: Physics.SphereCast

Сообщение IDoNotExist 25 апр 2018, 10:42

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

Она не пересекает две грани, а ударяется в первую грань, ваше Gizmo некорректно отображает суть сфера каста, он "кидает" сферу из определённой позиции в определённом направлении, и возвращает данные первой поверхности в которую ударяется сфера.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Physics.SphereCast

Сообщение bilol@leeching.net 25 апр 2018, 11:21

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

То есть мне должна вернуться одна из этих боковых граней? И ее нормаль будет или(-1,0, 0) или (0, 0, -1)?
То значение, которое отображается в дебаге я получаю вызовом Physics.SphereCast и он возвращает (-0.3, 0, -1). Нормаль какой поверхности он тогда возвращает?
bilol@leeching.net
UNец
 
Сообщения: 31
Зарегистрирован: 15 июн 2016, 11:01

Re: Physics.SphereCast

Сообщение IDoNotExist 25 апр 2018, 11:28

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

Показывай код, что и как возвращаешь, (-0.3, 0, -1) - это не нормаль, а какая то ерунда.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Physics.SphereCast

Сообщение bilol@leeching.net 25 апр 2018, 11:58

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);
        }
    }
}
 
bilol@leeching.net
UNец
 
Сообщения: 31
Зарегистрирован: 15 июн 2016, 11:01

Re: Physics.SphereCast

Сообщение waruiyume 25 апр 2018, 12:25

Видимо это направление из точки касания в центр сферы, расположенной так, чтобы она касалась этой точки.
https://yadi.sk/i/DGXKFFxx3UkkCS
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Physics.SphereCast

Сообщение IDoNotExist 25 апр 2018, 12:42

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

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

и сразу всё поймёшь.
Последний раз редактировалось IDoNotExist 25 апр 2018, 12:55, всего редактировалось 1 раз.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Physics.SphereCast

Сообщение bilol@leeching.net 25 апр 2018, 12:47

Теперь понятно. Спасибо!
bilol@leeching.net
UNец
 
Сообщения: 31
Зарегистрирован: 15 июн 2016, 11:01


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29