Закончена третья часть цикла
Вот и закончена третья часть цикла. В ней я хотел еще рассказать о карабканье персонажа на скалы. Однако метод, использованный 3dbuzz мне не понравился, я сделал свой. Но во-первых он еще не доделан, во-вторых я пока просто морально не готов о нем рассказывать. Поэтому в уроках я делаю небольшой перерыв. По окончании расскажу об организации взаимодействия с предметами, постараюсь о смерти персонажа, возможно все-же сделаю карабканье как у баззов.
Кстати, о смерти персонажа я рассказал бы прямо сейчас. Однако опять-таки мне не подходит метод баззов. Они делают еще один префаб персонажа - рэгдолл. В юнити создают рэгдолл (да, там есть такой инструмент) и используют его. Мне не подходит по простой причине - у меня персонаж состоит из частей. При создании рэгдолла в Юнити нужно указывать кости. У меня у каждой части свои кости. Кости какой части указывать? Нужно как-то объединить все кости в одну структуру. Повторение само по себе ненормально, а тут еще не позволяет сделать рэгдолл. Как это сделать я пока не знаю. Если кто знает - отпишитесь, пожалуйста.
Тег плейер
Решил пока оставить этот вопрос. Просто нужно помнить, что на targetLookAt обязательно нужен тег. Отчего такое - совершенно не понятно. Не от скриптов, т.к. в пустом проекте такого нет. Будет время - может покопаюсь еще. Если кто сообразит - буду очень рад.
Ура! Все оказалось значительно проще. Когда то я прикрепил targetLookAt к голове персонажа и благополучно об этом забыл. Сейчас сделал еще один такой же объект, прикрепив его уже у самому персонажу. Получилось два объекта с одним именем! Отсюда все глюки.
Ладно - это решили. Можно двигаться дальше. Разбираюсь с лазаньем по скалам. Пока буду делать простой вариант - как у Базз-ов. Объем - триггер, входя в который можно залезть. Что мне в этом совсем не нравится - нормально будет только при определенной высоте обрыва. Если высота другая - будет плохо. Но об этом потом - когда сам во всем разберусь.
Тег Player и targetLookAt
Похоже я сам запутался в своих скриптах :D Если на targetLookAt не стоит тег Player, скрипты почему то считают, что его позиция где-то на полтора метра впереди персонажа.
Тег Player использовался всего два раза - при первоначальной настройке камеры, и при проверке камеры на оклюжн (чтобы не реагировала на игрока). Первое использование я убрал, т.к. лучше вешать скрипт камеры не на первый найденный объект с тегом Player, а на конкретный объект с именем Player. Просто заменяем строку в GetCamera на:
GameObject pl = GameObject.Find("Player" ) ;
Остался один случай использования тега. Однако как он может влиять на позицию targetLookAt я никак не пойму.
Как определил, что он влияет? Просто иногда камера вдруг переставала реагировать на препятствия. Чтобы определить причину нарисовал конус от targetLookAt до плоскости отсечения камеры. Не помню в уроках это было или нет, но делается просто. В методе _CheckClip вызываем спецметод
{ Debug.DrawLine(fromp, to + _tr.forward * -_nearclip, Color.red); Debug.DrawLine(fromp, cp.upperRight); Debug.DrawLine(fromp, cp.upperLeft); Debug.DrawLine(fromp, cp.lowerRight); Debug.DrawLine(fromp, cp.lowerLeft); Debug.DrawLine(cp.upperRight, cp.upperLeft); Debug.DrawLine(cp.upperRight, cp.lowerRight); Debug.DrawLine(cp.lowerLeft, cp.lowerRight); Debug.DrawLine(cp.lowerLeft, cp.upperLeft); }
fromp - позиция target, to - позиция камеры.
Ну и сразу увидел, что target совсем не там, где стоит на самом месте. Попробовал его сдвинуть - "Вот тебе, батенька, и Юрьев день!" - его позиция совсем не влияет на отображение. Ставлю ему тег Player - все работает как положено. И что интересно - и в том и в другом случае переменная _target класса CharTPSCamera установлена как и положено на targetLookAt. Однако, если у него нет тега Player он вообще получается не используется!
В пустом проекте такого нет. Значит у меня где-тов коде косяк. Блин! Никак не могу найти!
Выяснил еще, что неважно какой тег, главное чтобы был какой-то.

