целиться из глаз к в сторну мыши

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

целиться из глаз к в сторну мыши

Сообщение Zimaell 22 апр 2023, 22:32

мне нужно чтобы персонаж целился туда куда указывает мышь, но пока что у меня получается целиться туда куда мышь попадает в препятствие (пол к примеру), получается мне как-то нужно улавливать направление луча и направление от персонажа вперед к направлению мыши, но как это сделать пока что не пойму.
То есть чтобы прицел был визуально на уровне глаз а не на полу.
Подскажите как это можно сделать?

https://youtu.be/wpxGE9nPtYA
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: целиться из глаз к в сторну мыши

Сообщение Alkos26Rus 22 апр 2023, 22:39

Где код?
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: целиться из глаз к в сторну мыши

Сообщение 1max1 22 апр 2023, 22:50

Я ничего не понял, нужно чтобы оружие было направлено в красную точку?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: целиться из глаз к в сторну мыши

Сообщение Zimaell 23 апр 2023, 00:05

1max1 писал(а):Я ничего не понял, нужно чтобы оружие было направлено в красную точку?

в видео перс стоит на ступеньках высоко я провожу мышкой под ступеньками и соответственно прицел на полу внизу, визуально же это выглядит как будто прицел сзади а смотрит вперед.
То есть он должен смотреть туда где мышь, где курсор, а не куда луч уже в землю попадает...
код прицеливания сейчас такой

Синтаксис:
Используется csharp
if(Physics.Raycast(Camera.main.ScreenPointToRay(input.MousePos), out RayHit, Mathf.Infinity, ~IM)){
  LookTarget = RayHit.point;
  }

private float DeltaRot = 0f;
    private float DeltaRotTime = 0f;
    private Quaternion LookTargetRot;
    private void CheckLookTarget(){
        LookTargetRot = Quaternion.LookRotation(LookTarget - Model.transform.position);
        DeltaRot = Quaternion.Angle(Model.transform.rotation, LookTargetRot);
        if(DeltaRot > 0.0f){
            DeltaRotTime = Mathf.SmoothDampAngle(DeltaRot, 0f, ref Rotref, 0.1f);
            DeltaRotTime = 1.0f - DeltaRotTime / DeltaRot;
            Model.transform.rotation = Quaternion.Slerp(Model.transform.rotation, LookTargetRot, DeltaRotTime);
            Model.transform.rotation = Quaternion.Euler(0f, Model.transform.rotation.eulerAngles.y, 0f);
            }
        }
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: целиться из глаз к в сторну мыши

Сообщение 1max1 23 апр 2023, 00:49

Я все равно ничего не понял, может кто-то другой объяснит мне что тут происходит =p~
У тебя перс клемпится по оси Y в повороте, он не сможет смотреть никуда кроме как по горизонту. Или что? Или как? Ты хочешь чтобы чел направил пушку в точку попадания рейкаста? Или чтобы красная точка была где-то в другом месте? Или чтобы он повернулся не жопой, а лицом к тебе, когда ты целишься под ступеньки?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: целиться из глаз к в сторну мыши

Сообщение Zimaell 23 апр 2023, 09:11

1max1 писал(а):Я все равно ничего не понял, может кто-то другой объяснит мне что тут происходит =p~
У тебя перс клемпится по оси Y в повороте, он не сможет смотреть никуда кроме как по горизонту. Или что? Или как? Ты хочешь чтобы чел направил пушку в точку попадания рейкаста? Или чтобы красная точка была где-то в другом месте? Или чтобы он повернулся не жопой, а лицом к тебе, когда ты целишься под ступеньки?

смотрите
https://ibb.co/d62vH0d
на скрине красная линия это луч из камеры до пола, синяя уровень персонажа, получается он должен смотреть в сторону пересечения красной и синей линии, то есть как будто на уровне глаз незримая плоскость и луч должен ударятся в эту плоскость а не лететь до пола...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: целиться из глаз к в сторну мыши

Сообщение 1max1 23 апр 2023, 10:54

Zimaell писал(а):
1max1 писал(а):Я все равно ничего не понял, может кто-то другой объяснит мне что тут происходит =p~
У тебя перс клемпится по оси Y в повороте, он не сможет смотреть никуда кроме как по горизонту. Или что? Или как? Ты хочешь чтобы чел направил пушку в точку попадания рейкаста? Или чтобы красная точка была где-то в другом месте? Или чтобы он повернулся не жопой, а лицом к тебе, когда ты целишься под ступеньки?

смотрите
https://ibb.co/d62vH0d
на скрине красная линия это луч из камеры до пола, синяя уровень персонажа, получается он должен смотреть в сторону пересечения красной и синей линии, то есть как будто на уровне глаз незримая плоскость и луч должен ударятся в эту плоскость а не лететь до пола...

Создаешь виртуальную плоскость на уровне синей линии и пуляешь в нее рейкастом, получаешь точку и делаешь дальше что хочешь.
https://docs.unity3d.com/ScriptReference/Plane.html
+
https://docs.unity3d.com/ScriptReferenc ... -ctor.html
+
https://docs.unity3d.com/ScriptReferenc ... ycast.html
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: целиться из глаз к в сторну мыши

Сообщение Zimaell 23 апр 2023, 12:31

1max1 писал(а):
Zimaell писал(а):
1max1 писал(а):Я все равно ничего не понял, может кто-то другой объяснит мне что тут происходит =p~
У тебя перс клемпится по оси Y в повороте, он не сможет смотреть никуда кроме как по горизонту. Или что? Или как? Ты хочешь чтобы чел направил пушку в точку попадания рейкаста? Или чтобы красная точка была где-то в другом месте? Или чтобы он повернулся не жопой, а лицом к тебе, когда ты целишься под ступеньки?

смотрите
https://ibb.co/d62vH0d
на скрине красная линия это луч из камеры до пола, синяя уровень персонажа, получается он должен смотреть в сторону пересечения красной и синей линии, то есть как будто на уровне глаз незримая плоскость и луч должен ударятся в эту плоскость а не лететь до пола...

Создаешь виртуальную плоскость на уровне синей линии и пуляешь в нее рейкастом, получаешь точку и делаешь дальше что хочешь.
https://docs.unity3d.com/ScriptReference/Plane.html
+
https://docs.unity3d.com/ScriptReferenc ... -ctor.html
+
https://docs.unity3d.com/ScriptReferenc ... ycast.html

суть вроде понял, сделал так - создал объект на персонаже и прицепил к нему Mesh Collider с сеткой Quad (у Plane больше же полигонов, хотя всё равно не рендерятся...), повернул его на 90 по X чтобы был поверхностью, размеры по 100 сделал и поднял на уровень 1.5, ну и задал ему отдельный слой чтобы луч именно его искал. Вроде получилось то что нужно было...
Просто думал может этого можно добиться без еще одного объекта, как-то с помощью вычислений, ну нужный результат получен и хорошо, спасибо.
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: целиться из глаз к в сторну мыши

Сообщение 1max1 23 апр 2023, 12:51

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

Ты шо кексик? Ты хоть ссылки смотрел что я кидал, там именно из кода можно проводить вычисления без объектов :ymparty:
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: целиться из глаз к в сторну мыши

Сообщение Alkos26Rus 23 апр 2023, 14:47

Ну тебе просто точку рейкаста нужно по Y назначить
Синтаксис:
Используется csharp
LookTarget = new Vector3(RayHit.point.x, Model.transform.position.y, RayHit.point.z);
 


Можешь еще офсет какой нибудь добавить, чтобы на уровне груди была позиция Model.transform.position.y + 1.5f
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: целиться из глаз к в сторну мыши

Сообщение Zimaell 23 апр 2023, 15:59

Alkos26Rus писал(а):Ну тебе просто точку рейкаста нужно по Y назначить
Синтаксис:
Используется csharp
LookTarget = new Vector3(RayHit.point.x, Model.transform.position.y, RayHit.point.z);
 


Можешь еще офсет какой нибудь добавить, чтобы на уровне груди была позиция Model.transform.position.y + 1.5f

действительно так проще, то что нужно, спасибо.
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: целиться из глаз к в сторну мыши

Сообщение 1max1 23 апр 2023, 16:30

Alkos26Rus писал(а):Ну тебе просто точку рейкаста нужно по Y назначить
Синтаксис:
Используется csharp
LookTarget = new Vector3(RayHit.point.x, Model.transform.position.y, RayHit.point.z);
 


Можешь еще офсет какой нибудь добавить, чтобы на уровне груди была позиция Model.transform.position.y + 1.5f

Это не будет работать правильно.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: целиться из глаз к в сторну мыши

Сообщение Zimaell 23 апр 2023, 20:29

1max1 писал(а):
Alkos26Rus писал(а):Ну тебе просто точку рейкаста нужно по Y назначить
Синтаксис:
Используется csharp
LookTarget = new Vector3(RayHit.point.x, Model.transform.position.y, RayHit.point.z);
 


Можешь еще офсет какой нибудь добавить, чтобы на уровне груди была позиция Model.transform.position.y + 1.5f

Это не будет работать правильно.

да вы правы, потестировал и некорректно отображает...
в общем чтот надоело с этим возиться, поэтому остановился на том варианте что я описывал выше, работает как нужно и всё, один лишний объект на управляемом персонаже роли не сыграет...
всем спасибо за помощь.
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45


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

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

Сейчас этот форум просматривают: Google [Bot] и гости: 24