Понедельник, 11 Ноября 2024, 03:18

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
Abel399Дата: Пятница, 22 Сентября 2017, 11:31 | Сообщение # 61 | Тема: Ищу программиста
Surpass your limits. Right now.
Сейчас нет на сайте
Galile0101, написал в лс, "будем посмотреть"

Ninja Slayer - 2D Physics Puzzle [cancelled]
Abel399Дата: Понедельник, 24 Апреля 2017, 19:48 | Сообщение # 62 | Тема: Варианты как сохранять стату игрока
Surpass your limits. Right now.
Сейчас нет на сайте
Эргалон,
Цитата Эргалон ()
нормальный взломщик


#define "нормальный взломщик"?)
Тот, кто просто умеет перехватить пакеты и применить к ним ряд эвристических алгоритмов? х) [а порой даже и элементарных обратных функций]

По сабжу:
jmp 465554555245 -> В данной задаче будет достаточно даже элементарного хранения данных в бинарном файле и использования защиты от дурака

Любая структура, хранящая данные, подчиненные определенным правилам, и имеющая возможности их добавления/удаления/обновления, является базой данных. Другой момент - как вы ее представите.
# Варианты:
1) Один/ряд текстовых/бинарных файлов, где хранятся данные, обработанные одним (а чаще несколькими) из алгоритмов шифрования;
2) JSON, XML, YAML и подобные в чистом или так же "скомпилированном" виде (с оговорками, но легче, чем СУБД);
3) Реляционная база данных и СУБД (MySQL, SQLite, PostgreSQL, Firebird и т.д.);
* СУБД тоже делятся на виды: какие-то являются клиент-серверными (PostgreSQL, MySQL), другие - встраиваемыми (SQLite, Firebird) и т.д.
4) Сохранение данных в памяти сервера с dump'ом через определенный промежуток времени;
5) Можно упороться и завести структуру данных аля ассоциативный массив (на хеш-таблицах или деревьях -> зависит от подхода), хранить все данные в ней и время от времени проводить ее сериализацию с последующим сохранением (ИМХО - в чистом виде не имеет права на жизнь).

Естественно не стоит выбирать только один способ, их нужно комбинировать.
В продакшене как правило используется концепция/технология ORM + реляционная база данных, но никто не запрещает сделать тоже самое, используя тот же JSON -> It depends on needs.

Но все это решаемо и не представляет из себя никакой сложности.
# Куда более важные проблемы:
* Какая архитектура используется в приложении?
* Какой уровень доступа предоставляется пользователю к его данным?
* Как часто пользователь должен обращаться к серверу, чтобы запросить свои данные?
* Должен ли он вообще обращаться к серверу за определенным видом данных?

# Несколько советов по хранению и передаче данных:
- Никогда не хранить пароли и другую конфиденциальную информацию в чистом виде, всегда применять к ним хеширование (SHA2, SHA3) и сравнивать по хешу
- При необходимости применять ряд алгоритмов шифрования/хеширования
- Всегда использовать уникальную для каждого пользователя "соль" (вики)
- Никогда не доверять пользователю, он врет ->
1. Хранить данные на сервере и производить их изменение там же, отсылать и получать данные с предварительным шифрованием, а еще лучше - вовсе не передавать данные напрямую, а использовать отправку событий (аля он нашел клад +3к опыта) с их предварительной проверкой на валидность (использование контрольных сумм, например)
2. При хранении же на стороне клиента применять вычисление контрольных сумм, проверку хешей и проводить четкий контроль при изменении данных
- При необходимости передачи данных через HTTP использовать HTTPS
- Защита от "дурака" тоже защита. Даже элементарное дублирование всех переменных с определенным ключом смещения и последующей их проверкой-сравнением дает результат
- При особой надобности пиши свою функцию шифрования на основе уже существующих. Очень примитивный пример:
Код
# Python3
def to_ascii(h):
    strs = ""
    for i in range(len(h)//2):
  strs += chr(int(h[(i*2):(i*2)+2], 16))
    return strs

def to_hex(s):
    strs = ""
    for i in range(len(s)):
  strs += "%x"%(ord(s[i]))
    return strs

def crypt(message):
    for i, v in enumerate(message):
  message = message[:i] + chr(ord(v)-12) + message[i+1:]
    return to_hex(message)

def de_crypt(message):
    message = to_ascii(message)
    for i, v in enumerate(message):
  message = message[:i] + chr(ord(v)+12) + message[i+1:]
    return message

crypted = crypt("Crypted_String")
print(de_crypt(crypted))


P.S> Это всего лишь неточная теоретическая выдержка и ряд вполне очевидных, но полезных советов. Пользоваться ими или нет - дело лично каждого.


Ninja Slayer - 2D Physics Puzzle [cancelled]

Сообщение отредактировал Abel399 - Понедельник, 24 Апреля 2017, 19:53
Abel399Дата: Вторник, 05 Января 2016, 16:19 | Сообщение # 63 | Тема: PHP-master server, NAT-Facilitator и механика взаимодействия
Surpass your limits. Right now.
Сейчас нет на сайте
Здравствуйте, уважаемые участники форума! Текста и лишних слов(такова моя манера речи... сложно говорить конкретно) будет много, так что если все же решитесь - терпения вам ^_^

Версия Unity: 5.0.2f1 (конечно, можно обновиться на новый, изучить его UNet(не копал, но все хвалят c: ), но пока вопрос стоит другим ребром).

В настоящий момент при организации мультиплеера в Unity возникли небольшие загвоздки с nat punchthrough... Используются самую малость дописанные PHP скрипты мастер сервера из данной темы. Работает без нареканий, все прекрасно (MainMenu.js и PHPMasterServerConnect.js из оригинала просмотрены и добавлен лишь необходимый функционал). А вот с NAT-Facilitator'ом(2.0.0, скачан и скомпилирован с сайта unity, т.е. используем свой собственный компьютер с ним) уже загвоздки. При необходимости пробивки Nat'а клиенты отказываются подключаться к фасилитэйтору, на одном клиенте греша на то, что он недоступен, на другом просто зависая. На компьютере с facilitator'ом порты проброшены(вообще, там даже режим Bridge ставился, т.ч. это не аргумент), ip белый, внешний, {Firewall, брандмауэр} - отключены. Еще один прикол в том, что когда еще решалось использовать стандартные Master Server и Facilitator, то работало все идеально, подключение было без проблем, оба клиента коннектились. Причиной отказа от Master Server'a была кривая реализация метода UnregisterHost на мастер-сервере (скорее всего это последний вариант, что остается, если здесь ничего не решится - искать проблему, из-за которой не происходит очищение таблицы на мастер-сервере. хотя, она более-менее ясна. если я не ошибаюсь, а мой английский не до такой степени уж плох, то community unity уже обсуждало этот вопрос, и проблемой видимо было то, что юнити не отправляет название таблицы для поиска в методе UnregisterHost, но может я все-таки неправильно понял, и кто-нибудь меня поправит). Из-за невозможности удалить хост с Master Server'а, пока он не выключен (т.е. когда он уже не может достучаться до хоста, то его благополучно подчищают), решением было использовать PHP Master Server, который в свою очередь теперь куралесит с Facilitator'ом.
Поиски по данной проблеме привели к этому обсуждению. Из нее мне все же наводит сомнения то, что похоже Facilitator до сих пор должен взаимодействовать с Master Server'ом от Unity. Конечно, там лишь сказано, что он использует это только для определения external-ip, но кто же его знает wink (да-да, вряд ли они оба обращаются к одному (локальному..?)хранилищу(да, наверняка, там обычный массив, список, любая коллекция в ОЗУ))
Для большего спокойствия - с отключенным useNat компьютеры коннектятся безупречно (проблема именно в Facilitator'e).

В оригинале PHP Master Server'a с форума Unity имеются строки:
Код
var conn = GetComponent(PHPMasterServerConnect);
conn.gameName = GUI.TextField (Rect (215, 300, 400, 25), conn.gameName);
//Вышеуказанное привожу, чтобы не возникало вопросов откуда переменная conn... она вообще отношения сейчас не имеет никакого, но заранее прибил возможный вопрос...
Network.InitializeServer (32, parseInt(portString), !Network.HavePublicAddress ());
MasterServer.RegisterHost (conn.gameType, conn.gameName, "");

Что, конечно же, как бы намекает на то, что мастер-сервер от unity запускается.

Собственно вопросы:
1) Кто-нибудь уже сталкивался с такими проблемами? Методы их решения? (конечно, вы можете сказать перейти Photon/SmartFox/ElectroServer(он загнулся?) и другие, но сейчас решается вопрос именно по стандартным средствам unity)
2) Копался ли кто-нибудь в коде Master Server'a? Даже технология его работы упростит (maybe) неизбежное изучение исходников.
3) В добавление к вопросу 2 - Обходные или валидные пути решения проблемы с UnregisterHost? (кроме как "зачудить" отключение сервера, мастер нас кикнет, а потом через промежуток времени заново его создать и законнектиться всем клиентам, что, кстати, может и не сработать, если "мистическая" связь facilitator'a и master server'a все же есть)
4) Если вы не сталкивались с этим, то что по вашему мнению здесь имеет подводные камни? (Очень логично, думаю, было бы посмотреть на Network.player.guid, который, если я правильно понимаю, выдает нам Facilitator как идентификатор при соединении с ним. Значит, если он неправильно определен(мы не приконнектились к искомому facilitator'у), то и NAT Punchthrough между клиентами невозможен, не так ли? Но почему тогда он коннектится, если мы установили master-server от unity на компьютере?..)

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

Всех с Наступающим Новым Годом!!! santa Счастья, успехов вам в грядущем 2016-ом, валидного кода и компилятора без ошибок!) :holiday:

P.S>Надеюсь, на форуме не настало заранее 1 января :"D
P.S.S:
Да, все же скажу к чему все эти заморочки и зачем мне удаление сервера до его выключения. Клиент нажимает кнопку поиска, идут запросы на мастер-сервер, там он находит уже открытые сервера других игроков, пробует к ним коннектиться, если, в итоге, никуда не законнектился - создает сервер сам(именно здесь довольно полезен nat facilitator). Сервера (если они пусты, еще нет игроков на них, т.е. неизвестно - а они вообще могут быть таковыми..) продолжают запросы на мастер-сервер, как и обычный клиент. И если они смогли законнектиться на другой сервер, то свой они прикрывают и становятся обычным клиентом. Так открывается лобби, в котором собираются игроки. Возможное количество - от 2х до 4х. Когда все игроки нажали "Ready", начинается отсчет до запуска игры (не знаю, может быть, можно оставить возможность приконнектиться в этот промежуток). Пока идет отсчет - отправляется UnregisterHost(т.е. нам больше числиться в серверах не нужно, нам не нужны больше игрок для данной сессии игры). По окончанию - стартуется игра, сервер - игрок, к нему все законнекчены либо напрямую, либо через facilitator.

Добавлено (05 января 2016, 16:19)
---------------------------------------------
UP, думаю, многие успешно отошли от НГ < 3

Сообщение отредактировал Abel399 - Вторник, 29 Декабря 2015, 16:54
Abel399Дата: Понедельник, 04 Января 2016, 03:28 | Сообщение # 64 | Тема: Следование за видом
Surpass your limits. Right now.
Сейчас нет на сайте
В принципе, все уже объяснили. Добавлю лишь код. Раньше в GM всегда делал именно такую реализацию для данной задачи(поместить в событие Draw):
Код
x = view_xview[0] + xstart;
y = view_yview[0] + ystart;
draw_sprite(sprite_index,image_index,x,y);


Сообщение отредактировал Abel399 - Понедельник, 04 Января 2016, 03:29
Abel399Дата: Воскресенье, 03 Января 2016, 16:14 | Сообщение # 65 | Тема: Как проверить нагруженность скрипта в миллисекундах?
Surpass your limits. Right now.
Сейчас нет на сайте
Код
//Какая-либо итерация цикла...
AllTime+=(Time.time-LastTime);
LastTime = Time.time;

Ну, как-то так думаю можно для скрипта.. С PlayMaker не работал, не могу говорить... если у вас какие-либо операции происходят в update, то можно придумать как использовать Time.deltatime. А может быть я ошибаюсь и мой метод не сработает, тогда думаю помогут короутины...
Сложно точно вам посоветовать, так как непонятно где и в каком моменте нужно отслеживать... Если есть некое "начало" и некий "конец" работы скрипта, то просто запоминаем время начала, а в конце находим разницу времени. Тогда в PlayMaker тоже можно так же поступить, если там есть возможность получить время и потом найти промежуток.. Больше информации не помешало бы wink

Добавлено (03 января 2016, 16:14)
---------------------------------------------
А еще есть замечательный инструмент - Profiler. Борозда прокопана, остается лишь углубляться happy

Abel399Дата: Суббота, 02 Января 2016, 12:03 | Сообщение # 66 | Тема: Оператор switch
Surpass your limits. Right now.
Сейчас нет на сайте
Ну, типо так....
Код
switch(room)
{
    case room1:
    room_goto(room2);
    break;
    
    case room2:
    room_goto(room3);
    break;
    
    case room3:
    room_goto(room4);
    break;
    
    case room4:
    room_goto(room5);
    break;
    
    case room5:
    room_goto(room1);
    break;
}

И так далее....
Пример
Abel399Дата: Пятница, 01 Января 2016, 03:00 | Сообщение # 67 | Тема: Поздравления пользователей
Surpass your limits. Right now.
Сейчас нет на сайте
С Новым годом, дорогие форумчане!!!! Да принесет он вам море счастья, успехов, незабываемых впечатлений и моментов из жизни! Пусть ваши проекты добьются своих высот и будут радовать окружающих.
Валидного кода и земного счастья, С НОВЫМ, 2016, ГОДОМ, ребята!!! holiday santa xmas :v:
P.S>А еще здорового и беспоследственного вам утра 1 Января!) booze


Сообщение отредактировал Abel399 - Пятница, 01 Января 2016, 05:02
Abel399Дата: Четверг, 31 Декабря 2015, 16:32 | Сообщение # 68 | Тема: Столкновение со стеной
Surpass your limits. Right now.
Сейчас нет на сайте
Я пытался :"D

В o_player в столкновении со стеной смотри код. Управление на коленке по-быстрому делал. Если что не так - спрашивай thumb


Сообщение отредактировал Abel399 - Четверг, 31 Декабря 2015, 16:33
Abel399Дата: Четверг, 31 Декабря 2015, 14:36 | Сообщение # 69 | Тема: Столкновение со стеной
Surpass your limits. Right now.
Сейчас нет на сайте
Зависит от габаритов стены и метода определения столкновений. Если через place_meeting в step'е, то что-то типо этого:
Код
if(place_meeting(x+sprite_get_width(sprite_wall)*sign(hspeed),y,obj_wall)) hspeed=-hspeed;
if((place_meeting(x,y-sprite_get_height(sprite_wall),obj_wall))//или тоже *на sign, зависит от целей
{
hspeed = 0;
y = yprevious;
}

Если столкновение через Events:
Код
if(collision_line(x,y,x+hspeed,y,obj_wall,0,1)) hspeed = -hspeed;
if(collision_line(x,y,x,y+vspeed,obj_wall,0,1))//либо -abs(vspeed), если только столкновение сверху
{
vspeed = 0;
y = yprevious;
}

Пишу с телефона, синтаксические ошибки возможны.

С Наступающим Новым годом!)) santa
Abel399Дата: Среда, 30 Декабря 2015, 17:27 | Сообщение # 70 | Тема: Проблема с collision_point
Surpass your limits. Right now.
Сейчас нет на сайте
Может быть в спрайте неверно указана галочка "Precise collision checking"?... Обычно в таких случаях все решается методом тестов. Берете, создаете новый спрайт, вешаете на него скрипт, балуетесь с настройками спрайта и в процессе этой творческой деятельности в большинстве случаев всегда появляются догадки, подозрения. Т.е. если оно у вас и там работать не станет, следует прочесать официальный форум, возможно, это действительно связано с версией и следует переустановить gm. Либо это связано с конкретным спрайтом, и там вы уже будете точно знать, где копать.
С Наступающим ;>
Abel399Дата: Среда, 30 Декабря 2015, 14:57 | Сообщение # 71 | Тема: Мультиплеер взамосвязь с сервером
Surpass your limits. Right now.
Сейчас нет на сайте
Могу представить это себе так:
В GM:S игра экспортируется под html5, реализовать нужно либо прямое, либо через php общение с MySQL(глянь). При начале игры сайт регистрирует их сессию в таблице mysql под уникальным идентификатором, который будет использоваться для "разговора" игроков. В таблице можно сделать 2 колонки и так хранить историю ходов для каждого игрока, либо одну колонку, где будет записан просто текущий ход(говлрить буду о нем). Когда игрок походил, он шлет запрос на mysql сам/через php, находит строку своей сессии и в столбце ходов записывается сам ход. Другой игрок, который ожидает, раз в секунду, допустим, шлет запрос и проверяет состояние этой ячейки. Если она не пуста - считывает данные, чистит ячейку, и ход передается в его руки. И так по кругу. Победу определять, конечно, лучше на сервере, но все зависит от условий ее наступления. На клиенте все же нежелательно это делать... Шифрование запросов уже дело принципов(здесь от "читерства" применить можно сравнение хеш-кодов запросов). Чтобы определить лив игрока, можно использовать сравнение времени обновления запросов от клиента, для каждого своя ячейка в базе. Для общения с php, как я понимаю, теперь юзается - Asynchronous

В итоге, все упрется в хороший хостинг и "неглючную" BD.

Успехов, с Наступающим Новым годом! smile Если что-то непонятно, или я категорически не прав, говорите с;


Сообщение отредактировал Abel399 - Среда, 30 Декабря 2015, 14:59
Abel399Дата: Среда, 03 Сентября 2014, 09:39 | Сообщение # 72 | Тема: Голосование за проекты конкурса "Gamiron №8"
Surpass your limits. Right now.
Сейчас нет на сайте
Почти все проекты интересны и прекрасны, но больше всего склонил к себе |Rutraple - HappyPumpkin| благодаря своей ненавязчивостью, приятной для глаз *мультяшной* графикой и возможностью выстраивать некие подобия механизмов, а не напревшие уже блоки(блокостроение). К тому же игра позволяет расслабиться и отдохнуть, решая несложные поставленные задачки =)

Ninja Slayer - 2D Physics Puzzle [cancelled]

Сообщение отредактировал Abel399 - Среда, 03 Сентября 2014, 10:25
Abel399Дата: Среда, 23 Июля 2014, 16:35 | Сообщение # 73 | Тема: Поворот объекта к неровной поверхности
Surpass your limits. Right now.
Сейчас нет на сайте
Fr0sT, Ясно, появилась мыслЯ. У меня просто поворот меняется каждый кадр => сглаживание тут не ощущается. И есть два выхода: сохранение времени или установка контрольных точек поворота через равные промежутки времени, что наверняка напоминало твою реализацию. Буду пробовать happy

Ninja Slayer - 2D Physics Puzzle [cancelled]
Abel399Дата: Вторник, 22 Июля 2014, 15:55 | Сообщение # 74 | Тема: Поворот объекта к неровной поверхности
Surpass your limits. Right now.
Сейчас нет на сайте
Fr0sT, Спасибо за отзыв :-) Я так и делаю. У меня character controller висит на общем префабе, а внутри него сама моделька персонажа, которая и поворачивается. А у тебя все-таки получилось смягчить поворот?
Левша, В связи с моим неполным пониманием функции, я отложил это дело до ближайшего времени. Сейчас занимаюсь основной игровой логикой, но над решением данной "мелочи" все ещё думаю :-)

Ещё раз спасибо за внимание.


Ninja Slayer - 2D Physics Puzzle [cancelled]
Abel399Дата: Четверг, 17 Июля 2014, 09:38 | Сообщение # 75 | Тема: Поворот объекта к неровной поверхности
Surpass your limits. Right now.
Сейчас нет на сайте
allods, Да, в паренте. Но это не имеет значения ибо дрожит не камера, а сам персонаж, который наклоняется к поверхности. И камера следом за ним. Камеру можно и скриптом плавно поворачивать.
Левша, Я вас понял. Дело в том, что я плохо объясняю =) смотрите:
Вот поверхность:


Вот на этом бугре или неровности поверхности, персонаж поворачивается перпендикулярно бугру. Потом опять встает на сглаженную поверхность и нормально поворачивается. Вы предлагали поворачивать объект на угол в градусах по нужным осям. Это правильно, да. Но ведь можно поворачивать и сразу по компонентам Quaternion для меньших расчетов (здесь, возможно, вы можете не понять мою мысль из-за моих ужасных объяснений :D). Если идеально выровнять поверхность terrain, сделать небольшую сопочку (обязательно ровную и без сглаживания, чтобы не было бугорков), то наклон будет идеальным и правильным, без "тряски". Т.е. нужно как-то сделать так, чтобы если поверхность резко меняется в течении какого-то времени, то скрипт игнорировал поворот или же запрещал очень резкие повороты.

Эх.. Надеюсь моя писанина хоть немного понятна. Спасибо за уделенное внимание smile

P.S>А вообще это происходит из-за постоянной смены нормали к поверхности. Их видимо много в одном месте и =>Смена наклона очень резка и быстра.


Ninja Slayer - 2D Physics Puzzle [cancelled]

Сообщение отредактировал Abel399 - Четверг, 17 Июля 2014, 09:49
Abel399Дата: Вторник, 15 Июля 2014, 08:12 | Сообщение # 76 | Тема: Поворот объекта к неровной поверхности
Surpass your limits. Right now.
Сейчас нет на сайте
Левша, Да нет. Камера по осям x и z вообще не поворачивается (пока, позже попробую сделать плавный поворот камеры за объектом). Тут дело в том, что нормаль поверхности получается каждый фрейм, и порой на вроде бы ровной поверхности она получается отличной от предыдущей. И, как следствие, объект резко поворачивается в ненужную сторону, а потом возвращается в исходное положение. Отсюда и появляется "дрожание" и "вибрация". Думал выровнять terrain в Photoshop, но не помогло. Все равно почему-то имеется такой феномен.

Ninja Slayer - 2D Physics Puzzle [cancelled]

Сообщение отредактировал Abel399 - Вторник, 15 Июля 2014, 08:14
Abel399Дата: Понедельник, 14 Июля 2014, 10:00 | Сообщение # 77 | Тема: Поворот объекта к неровной поверхности
Surpass your limits. Right now.
Сейчас нет на сайте
Левша, Большое спасибо, интерполяция прекрасная вещь =) С горем пополам и бомбежкой Google я научился поворачивать объект вокруг локальной оси и теперь все выглядит просто Щикарно. Вот код, чтобы с такой проблемой никто не сталкивался:
Код
var RayHit: RaycastHit;
if(Physics.Raycast(transform.position, Vector3.down, RayHit))
{
   target.rotation = Quaternion.FromToRotation(target.up,RayHit.normal);
   target.RotateAround(target.position, target.up, rot);
}

rot - угол поворота модели по оси Y.

Еще раз спасибо за помощь =)

P.S>Ответа на маленький вопрос про Backface Culling никто не знает?

Добавлено (14.07.2014, 10:00)
---------------------------------------------
Эх... способ работает, но сглаживание достичь все равно не удалось. Бывают моменты, что модель дергается даже на ровной поверхности. Но как же в видео все так удачно реализовано.. wink


Ninja Slayer - 2D Physics Puzzle [cancelled]

Сообщение отредактировал Abel399 - Понедельник, 14 Июля 2014, 08:06
Abel399Дата: Понедельник, 14 Июля 2014, 06:15 | Сообщение # 78 | Тема: Поворот объекта к неровной поверхности
Surpass your limits. Right now.
Сейчас нет на сайте
Левша, спасибо за отзыв smile Возрадуется великий Чингис-хан, у меня получилось повернуть игрока к поверхности:
Код
if(Physics.Raycast(transform.position, Vector3.down, RayHit)) target.rotation = Quaternion.FromToRotation(transform.up,RayHit.normal);


target - дочерний префаб модели персонажа

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

Добавлено (14.07.2014, 06:15)
---------------------------------------------
Неее, способ себя не оправдывает - прыжки камеры и модели просто дикие, поворот не всегда работает... Надо контроллер на модель вешать вероятно..


Ninja Slayer - 2D Physics Puzzle [cancelled]

Сообщение отредактировал Abel399 - Понедельник, 14 Июля 2014, 06:05
Abel399Дата: Понедельник, 14 Июля 2014, 05:29 | Сообщение # 79 | Тема: Поворот объекта к неровной поверхности
Surpass your limits. Right now.
Сейчас нет на сайте
Приветствую вас, дорогие форумчане. Во время работы в Unity у меня возник один довольно коварный вопрос, ответ на который я так и не смог найти в великом Google. Точнее я нашел заметку на официальном сайте на форуме, но не понял метода реализации... Суть вопроса: мне необходимо, чтобы при движении персонажа модель поворачивалась по осям x и z так, что персонаж постоянно ногами находился на земле. Идеальный пример реализации - серия игр про Sonic'а от Sega. Есть так же видео, где данная вещь показана на Unity: http://www.youtube.com/watch?v=LGbWo9Da40M.

Мне известно лишь то, что это можно реализовать, проводя нормаль в точке столкновения с сурфейсом поверхности и поворотом на *какой-то вектор(вроде направление движения или transform.up)* -> сама нормаль (RaycastHit.normal или collision.contacts[number].normal).







Персонаж представляет из себя префаб, на котором висит Character Controller и сам скрипт управления. В дочерних объектах находится Camera и префаб модели персонажа со скелетом и мешом. На нем так же висит компонент Animation. В качестве поверхности используется обыкновенный Terrain.

Думаю, что этой информации вполне достаточно для описания моей ситуации. Спасибо за внимание и надеюсь на вашу помощь happy

P.S>Если будет необходима дополнительная информация о персонаже - сообщите, я предоставлю.


Ninja Slayer - 2D Physics Puzzle [cancelled]

Сообщение отредактировал Abel399 - Понедельник, 14 Июля 2014, 05:37
Abel399Дата: Среда, 24 Июля 2013, 03:19 | Сообщение # 80 | Тема: Выравнивание текста
Surpass your limits. Right now.
Сейчас нет на сайте
Эм.... так?... dry :
Код
draw_set_halign(fa_center);
draw_text(view_wview[0]/2,view_hview[0]/2,"/");
draw_set_halign(fa_right);
draw_text(view_wview[0]/2-4,view_hview[0]/2,hp);
draw_set_halign(fa_left);
draw_text(view_wview[0]/2+4,view_hview[0]/2,"100");

И вот пример, сделанный за 1 минуту))) Удачи happy


Ninja Slayer - 2D Physics Puzzle [cancelled]
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг