This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Вопрос Поворот объекта в сторону другого объекта

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
Есть два объекта в мире, один стоит на месте а другой перемещается, мне нужно повернуть первый объект в сторону второго. Можно как то вычислить углы xyz на которые надо повернуть обьект относительно координат перемещаемого объекта средствами рейджа?
 

Nevedimka

Активный участник
6 Янв 2021
156
38
83
Ну вот так можно Rotation.Z вычислить
C#:
Vector3 dir = from - To;
double angle = -Math.Atan2(dir.X, dir.Y) * (180 / 3.1416f) + 180;
from - позиция объекта, который нужно повернуть
to - позиция объекта, к которому нужно повернуть первый объект
 

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
C#:
        public static Vector3 DirectionToRotation(Vector3 dir, float roll)
        {
            dir = dir.Normalized;
            Vector3 rotval = new Vector3();
            rotval.Z = ((float)Math.Atan2(dir.X, dir.Y)) * (180.0f / MathF.PI);
            Vector3 rotpos = new Vector3(dir.Z, new Vector3(dir.X, dir.Y, 0.0f).Length(), 0.0f).Normalized;
            rotval.X = ((float)Math.Atan2(rotpos.X, rotpos.Y)) * (180.0f / MathF.PI);
            rotval.Y = roll;
            return rotval;
        }
 
Реакции: Nevedimka

Nevedimka

Активный участник
6 Янв 2021
156
38
83
Ебать ты сверхразум
 

artemsiberian

Участник портала
22 Май 2021
59
10
50
Если эти объекты не являются человеком или машиной, запаришься находить их позицию, повернуть их друг к другу это 10 процентов дел)
я две ночи сижу уже, накостылял что то через рейкасты, пашет, но хотелось бы лучше, если кто шарит, как получить entity заспавненного object (не пед не авто) подскажите пожалуйста)
 

X-Clusiv

Модератор
Команда форума
Moderator
BackEnd developer
4 Окт 2020
708
319
161
30
Код:
let entity = mp.objects.new('apa_prop_flag_portugal', player.position,
{
   rotation: player.rotation,
   alpha: 250,
   dimension: player.dimension
});
либо если знаете его id
Код:
let entity = mp.objects.at(id);
 
Реакции: artemsiberian

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
Ну в моем случае я сам создавал координаты обьекта на основе положения камеры, и пересечения ею обьектов. Entity любого обьекта это Handle, я делаю все на c#, объекты создаю через RAGE.Game.Elements.MapObject mapobj = new ... а уже в самом обьекте есть Handle
 

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
Да и RAGE.Game.CreateObject возвращает же его entity, если ты на c# делаеш
 
Реакции: artemsiberian

artemsiberian

Участник портала
22 Май 2021
59
10
50
Да и RAGE.Game.CreateObject возвращает же его entity, если ты на c# делаеш
Спасибо, да делаю на си шарп

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

p.s RAGE.Game.Elements.MapObject mapobj не могу найти документацию, что это?)
 

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128



Это MapObject, создание объект на карте )
 

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
А как ты получаеш обьекты в радиусе?
 

artemsiberian

Участник портала
22 Май 2021
59
10
50
А как ты получаеш обьекты в радиусе?
Сейчас я кидаю рейкаст на объект, и рейкаст возвращает хендл, но если объект маленький сложно мышкой попасть) вот и спросил как получить объекты в радиусе по человечески без рейкастов
 

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128

artemsiberian

Участник портала
22 Май 2021
59
10
50
Не, просто c# плохо документирован
Ну судя по всему разницы нет, что мап обжект использовать, что я в базу сохраняю,

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

artemsiberian

Участник портала
22 Май 2021
59
10
50
А на стороне сервера можно расчитать дистанцию между двумя объектами если известны X Y Z и того и другого?
 

X-Clusiv

Модератор
Команда форума
Moderator
BackEnd developer
4 Окт 2020
708
319
161
30
Код:
getDistance = (x1,y1,z1,x2,y2,z2)=>{
 return Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) + (z1 - z2) * (z1 - z2));

}
 
Реакции: artemsiberian

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
Vector3.Distance, но не рекомендую выполнять ресурсоемкие мат вычисления со стороны сервера