Проблема с отражением луча от объекта.

Программирование на Юнити.

Проблема с отражением луча от объекта.

Сообщение aklaim 01 авг 2011, 10:37

Пытаюсь реализовать отражение света в 2д.
Есть источник света, который посылает луч (Physics.Raycast), когда луч попадает на какой нибудь стоящий перед ним объект, я хочу отразить его от этого объекта под углом.
Для определения угла под которым нужно отразить луч, с помощью 2-ух вспомогательных лучей строится треугольник и высчитываются его углы. Проблема в том что я не знаю как послать луч (Physics.Raycast) из точки соприкосновения с объектом под углом.
Примерная схема того как это выглядит.
Изображение

Возможно я неправильно все делаю и есть уже готовые решения схожих проблем, просто я их не знаю. :( Если есть предложения как это по другому реализовать с удовольствием их выслушаю.
aklaim
UNец
 
Сообщения: 2
Зарегистрирован: 01 авг 2011, 10:18

Re: Проблема с отражением луча от объекта.

Сообщение Левш@ 01 авг 2011, 12:24

Для начала нужно определить точку попадания, вот пример схожего кода:
Синтаксис:
Используется javascript
function Shoot ()  {
        var direction = transform.TransformDirection(Vector3.forward);
        var hit : RaycastHit;
  if (Physics.Raycast (flashLight.transform.position, direction, hit, range))  {    
        sparks.transform.position = hit.point;
        sparks.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
        sparks.Emit();
        sparks.emit = false
}

А потом из этой точки, аналогичным методом отправить hit2.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Проблема с отражением луча от объекта.

Сообщение waruiyume 01 авг 2011, 12:27

Vector3.Reflect и усё.
Синтаксис:
Используется javascript
var ray:Ray;
var hit:RaycastHit;

function Update ()
{
        ray=Ray(transform.position,transform.forward);
        if (Physics.Raycast(ray,hit,100))
        {
                Debug.DrawRay(hit.point,transform.position-hit.point,Color.red);
                ray.direction = Vector3.Reflect(ray.direction,hit.normal);
                Debug.DrawRay(hit.point,ray.GetPoint(100),Color.green);
        }
}
 

---------------------------------------
Вариант для n-прыжков:
Синтаксис:
Используется javascript
private var jumpN:int=0;
var bounces:int =10;
function ReflectRay(r:Ray,h:RaycastHit)
{
        Debug.DrawRay(h.point,r.origin-h.point,Color.red);
        r = Ray(h.point,Vector3.Reflect(r.direction,h.normal));
        if (jumpN<bounces)
        {
                if (Physics.Raycast(r,h,100))
                {
                        ++jumpN;
                        ReflectRay(r,h);
                }
                else
                {
                        if(jumpN<bounces) Debug.DrawRay(h.point,r.GetPoint(1000),Color.red);
                }
        }
}

function Update ()
{
        jumpN=0;
        var hit:RaycastHit;
        var ray:Ray=Ray(transform.position,transform.forward);
        if (Physics.Raycast(ray,hit,100))
        {
                ReflectRay(ray,hit);
        }
}
 
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Проблема с отражением луча от объекта.

Сообщение aklaim 01 авг 2011, 14:39

waruiyume, Левш@ Спасибо огромное! Примеры помогли разобраться.
aklaim
UNец
 
Сообщения: 2
Зарегистрирован: 01 авг 2011, 10:18


Вернуться в Скрипты

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

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