![]() |
Ответ: Передача переменной в метод
угол между текущим кватернионом и конечным http://docs.unity3d.com/Documentatio...ion.Angle.html
|
Ответ: Передача переменной в метод
спасибо, решил проблему немного не таким способом как вы советовали. Просто после каждого поворота обнулял rotation родителя в исходное положение и прописал 4 возможных поворота - наследование делает все остальное.
Всем спасибо за советы )) скоро будет очередная порция тупых вопросов )) upd: собственно один из них - как родителем объекта сделать не определенный объект, а его инстанс? дело в том, что скрипт работает на одном объекте, но при нескольких объектах в сцене родитель привязывается лишь к одному. Логикой чую, что нужно делать инстанс родителя для каждого отдельно взятого юнита. Но если делаю объект для привязки префабом (т.е. GameObject) то компилятор говорит что Instance будет типа Object а не GameObject. А он не имеет компонента transform (хотя непонятно почему), если же объявить переменную, где собираюсь хранить ссылку на инстанс, как GameObject, то к нему нельзя применить метод Instantiate (брр...) тут примеры только на яве http://docs.unity3d.ru/ScriptReferen...rom=GameObject понимаю, что опять упускаю какую-то базовую концепцию |
Ответ: Передача переменной в метод
Код:
компилятор говорит что Instance будет типа Object а не GameObject GameObject go = (GameObject)Instantiate (...); |
Ответ: Передача переменной в метод
Цитата:
GameObject go = Instantiate(...) as GameObject; |
Ответ: Передача переменной в метод
Отличия есть. В твоем случае не будет ошибки, если Instantiate(...) возвращала бы не UnityEngine.Object, а вообще произвольный тип объекта. При неверном касте просто вернет null. Директ каст (GameObject)Instantiate (...); выдаст исключение.
|
Ответ: Передача переменной в метод
можно как-нибудь узнать высоту/длину/ширину бокса, в который вписана 3d модель? чтобы использовать для корректирования scale
|
Ответ: Передача переменной в метод
Сам меш: http://docs.unity3d.com/Documentatio...sh-bounds.html
Размер AABB: http://docs.unity3d.com/Documentatio...er-bounds.html Размер AABB колайдера: http://docs.unity3d.com/Documentatio...er-bounds.html |
Ответ: Передача переменной в метод
то что нужно, спасибо pax!
|
Ответ: Передача переменной в метод
небольшой вопросик: сейчас занимался экспортом модели из 3d max, долго парился с правильной обработкой модели скриптом (в итоге помог reset Xform и полный сброс трансформации в Unity).
Вопрос собственно вот в чем: по какому принципу нужно выставлять настройки в 3d max чтобы в unity объект занимал пространство 1х1х1 юнитов? Сложность в том, что я моделю в более крупном масштабе, а потом уменьшаю его "на глазок" пока не влезет. Но это слишком топорный способ. Может вы знаете более изящное решение? И еще странно - при импорте ассета из 3d max в Unity, движок считает меш как компонент дочернего объекта префаба а не самого префаба? Да, с bounds разобрался - коррекция работает при любых размерах меша. |
Ответ: Передача переменной в метод
Небольшой вопросик для общего развития - есть ли реализация функционала ступенчатых массивов на базе работы со списками?
Что можно почитать по этой теме? Интересует для реализации собственного гибкого алгоритма построения взвешенных и направленных графов. Как думаете с помощью чего проще и оптимальней реализовать: ступенчатых массивов или списков? |
Ответ: Передача переменной в метод
Думаю этот вопрос лучше задавать тут: http://forum.boolean.name/forumdisplay.php?f=21
ЗЫ: я не изучал вопрос по реализации графов, но вот в Юнити для графов в Меканим написана такая dll: UnityEditor.Graphs.dll Посмотри - может просто ее можно использовать. |
Ответ: Передача переменной в метод
ребят, глупый вопрос но все-таки. Делаю метод CheckInBorders:
PHP код:
он по идее должен проверить в какую из рамок экрана попал курсор мыши (для навигации камеры) но компилятор на каждом условии выдает ошибку cs0201 метод вызывается из метода update. Не могу понять почему так. MouseXCord, MouseYCord инициализируются при каждом вызове метода, типы соблюдаются... в чем может быть косяк? |
Ответ: Передача переменной в метод
везде return забыл и тип функции GetBordersInfo, после каждого условия компилятор не понимает что делать со значением.
|
Ответ: Передача переменной в метод
Цитата:
Стоп! А что по мнению вопрошающего делает выражение "GetBordersInfo.Left"? Оно возвращает значение enum. Что делают с этим значением - либо присваивают чему то, либо возвращают из функции. pax решил, что надо вернуть. Что хотели Вы? Цитата:
Ошибка в том, что нет скобки '}' у метода Start |
Ответ: Передача переменной в метод
про скобку - просто пропустил в цитате.
return не используется, но я понял с вашей помощью в чем косяк, я не правильно обновлял контейнер для enum PHP код:
кстати еще один вопрос, есть ли в C# конструкции которые позволяют условия типа ((x > a)&(x < b)) записывать более компактно? Именно попадание переменной в диапазон |
Ответ: Передача переменной в метод
Цитата:
|
Ответ: Передача переменной в метод
Напиши расширение, если нужно:
Код:
public static class Extension if(x.InRange(a, b)) |
Ответ: Передача переменной в метод
Это не на много короче, а по сути одно и то же. Плюс ты написал расширение с проверкой, что граничные значения диапазона не учитываются.
Кстати ты используешь побитовый И (&). Для чего? Надо обязательно проверить два условия? Оператор && остановит выполнение если уже не верно левое условие. |
Ответ: Передача переменной в метод
Цитата:
|
Ответ: Передача переменной в метод
блин, ребят помогите, опять застрял, четвертый час бьюсь а косяка не могу найти до сих пор.
В чем смысл - делаю навигацию камеры с небольшим движением по инерции после смены направления. Но почему-то весь блок где инерция должна по идее происходить - не происходит. Хотя если вставить отладчики, то видно что эти блоки выполняются. PHP код:
Т.е. если курсор был в левой части экрана GetBordersInfo.Left то при перемещении в центральную часть GetBordersInfo.None скорость должна плавно угаснуть с 1 до 0. Но не выходит, всю голову поломал. PS: Внимание, много говнокода! |
Ответ: Передача переменной в метод
RealSpeedX = Mathf.Lerp(SpeedXFrom, SpeedX, Time.time/2f); сдается мне что третье число в формуле должно лежать в диапазоне 0...1, а оно уже через 2 секунды от старта будет всегда больше 1, то есть надо выделить целую часть от такого числа и вычесть из исходного. Но хз как то оче сложно все для такой задачи.
|
Ответ: Передача переменной в метод
Цитата:
Вроде до второй секунды Time.time/2f и будет давать диапазон 0..1 или я ошибаюсь? |
Ответ: Передача переменной в метод
Как-то так
PHP код:
|
Ответ: Передача переменной в метод
Спасибо pax! То что нужно. Сразу в голову не пришло что нужно фиксировать начало инерции.
|
Ответ: Передача переменной в метод
как-нибудь можно отследить одновременное нажатие двух клавиш с помощью Input.GetKey? в том плане, что одна кнопка вызывает одно действие, вторая - другое, а две вместе третье
|
Ответ: Передача переменной в метод
Ну...
PHP код:
|
Ответ: Передача переменной в метод
спасибо, в справке не нашел что можно с помощью & отследить сразу две )
|
Ответ: Передача переменной в метод
Ребят подскажите такой вопрос:
в общем, работаю сейчас над навигацией камеры, сделал скрипт перемещения камеры и вращения, все делал через translate и rotation. Перемещение работает нормально, меня устраивает по удобству, а вот с вращением беда выглядит убого и по удобству тоже не особо хорошо получилось. Начал думать и читать справки. Появилась идея сделать вращение (и перемещение до кучи) через Rigidbody, AddForce и AddTorque (в режимах импульса и силы) отслеживая перемещения мыши и генерируя преобразованные векторы направления и вращения. По задумке такую систему можно будет потом безболезнено перенести на андроид для управления жестами. Собственно вопрос: насколько это правильно? Т.к. знаю что каждый кто разрабатывает игру рано или поздно сталкивается с навигацией камеры, притом на одном из ранних этапов разработки. Какой метод оптимальнее подходит? Расскажите как вы реализуете работу с камерой, может у вас есть какие-то алгоритмические решения выработанные с опытом. |
Ответ: Передача переменной в метод
какая камера нужна то для какого вида?
в любом случае, через ригидбоди это какой-то ужасный изврат. мауслуки обычные удобнее всего через углы эйлера делать имхо. в стандартных ассетах юнити уже есть пример мауслука для первого лица, можешь его за основу брать. |
Ответ: Передача переменной в метод
Цитата:
по поводу ригидбоди задумался т.к. это в теории (понимаю что извратство) позволит сделать навигацию камеры с помощью жестов мыши и соответственно жестом пальцами в тач-варианте (аналог: скроллинг веб-страницы на планшете). Передавать и вращать не физическим движком а используя Transform слишком деревяно выходит. Или все-таки это более оптимальный вариант просто требующий доработки? |
Ответ: Передача переменной в метод
я не понимаю как связан физический движок и жесты мыши.
|
Ответ: Передача переменной в метод
Цитата:
Я просто хочу организовать доводку и нативное управление и переложить расчеты на физ.движок а не на геометрические и физические формулы определения кватерниона вращения, направления движения и величины векторов с которыми перемещение и вращение происходит. Наверное слишком усложняю, но покурив форумы увидел что многие реализуют перемещение и вращение обычным трансформом, но нигде не нашел по переносу их на жесты на мультитаче. Или все что я расписал выше легко реализуется без rigidbody? |
Ответ: Передача переменной в метод
А такое пробовал?
http://docs.unity3d.com/Documentatio...moothDamp.html |
Ответ: Передача переменной в метод
Цитата:
|
Ответ: Передача переменной в метод
Определить координаты мыши на плоскости в пространстве можно только рейкастом или есть какие-то математические варианты, типа проекции экранных координат в мировые?
Если только рейкаст хотел уточнить - запускать луч каждый Update не слишком будет грузить ресурсы компьютера? Или есть какие-то методы оптимизации? |
Ответ: Передача переменной в метод
Тебе нужно:
|
Ответ: Передача переменной в метод
ох туплю.... как проверить число типа float на целочисленность, т.е. что у его текущего значения нет дробной части?
|
Ответ: Передача переменной в метод
if(Mathf.Abs(floatVar - (int)floatVar) < 0.00001f){
} |
Ответ: Передача переменной в метод
а как из рейкаста удалить взаимодействие со группой объектов кроме определенных? Чтобы информация о столкновении считывалась только с определенных объектов?
Чувствую надо копать в слоях, но подскажите хотя бы принцип upd. вроде есть способ через Layer Mask пока роюсь в справках |
Ответ: Передача переменной в метод
Код:
static bool Raycast(Vector3 origin, Vector3 direction, float distance = Mathf.Infinity, int layerMask = DefaultRaycastLayers); Про слои тут: Layers Там есть прямо пример селективного пускания лучей. |
Ответ: Передача переменной в метод
Цитата:
- можно ли задавать лучу группу слоев а не один (например - поверхность уровня, динамичные объекты, статичные объекты, другие. Или в этом случае пускается например два луча отдельно по каждому слою? - программно менять слой в рантайме, возможно ли? например объект перемещать из статичных в динамичные и т.д |
Ответ: Передача переменной в метод
Я снова со своими тупыми вопросами.
Продолжаю делать скрипт камеры. Поставило в тупик следующее: Код:
public void Camera_SlideCalc () { Код:
private Vector3 velocity = Vector3.zero; Всю голову поломал, видимо что-то опять недопонимаю... может velocity обнулять нужно после вызова функции? upd: сократил функцию до вида, проблема осталась: Код:
public void Camera_SlideCalc () { |
Ответ: Передача переменной в метод
Ты двигаешь цель, а камера как движется?
|
Ответ: Передача переменной в метод
камера наследует движение от цели как дочерний объект, пробовал вместо трансформа цели поставить трансформ камеры - то же самое.
Вот код целиком. Функция подобного движения активируется при долгом нажатии на левую кнопку мыши. Все действия в функциях с пометкой Slide PHP код:
|
Ответ: Передача переменной в метод
У тебя там кажется влияет
PHP код:
|
Ответ: Передача переменной в метод
разобрался, оказывается конфликтовали две velocity из разных частей кода. Я использовал один и тот же контейнер для хранения - видимо это и давало искажение.
|
Ответ: Передача переменной в метод
Вопрос на логику кода, читал сегодня справки, думал над реализацией.
В общем висит у меня на камере метод, отвечающий за тряску камеры. Хочу разобраться как лучше реализовать следующую логику: Метод тряски могут вызывать разные игровые объекты и события (взрывы, падения, повреждение и т.п) из собственных скриптов. Самый простой способ как я понял это отправка сообщений на активацию скрипта из других с помощью getComponent. Появился вопрос следующий, в методе есть возможность задавать длительность тряски с помощью переменной. Как реализовать установку длительности тряски из тех скриптов которые будут вызывать этот метод? Через getComponent смысл понятен, просто сначала посылать в скрипт значение продолжительности тряски и затем активировать его. Рассматриваю вариант с подпиской метода на события, но мне кажется это слишком запутывает задачу (или нет - подскажите?) тогда событие, которое активирует метод должно задать ему длительность. Как это реализовать? Сориентируйте как должен выглядеть скрипт чтобы в него можно было передавать длительность (shakeOver) из других скриптов, которые вызывают событие. Интересует изменение метода ShakeIsDo (), как его доработать? Надеюсь правильно объяснил вопрос. Не пинайте в справки, я просто опять упускаю какую-то базовую концепцию ООП. Отправлять в метод/функцию объект для его модификации и возврата с помощью return я разобрался, а тут требуется void но с заданным параметром, которым управляют другие объекты, совершенно разного типа. PHP код:
|
Ответ: Передача переменной в метод
Можно сделать через getComponent, ведь ты по сути получаешь этим способом экземпляр класса и можешь вызывать любой метод.
Делаешь public метод ShakeStart с нужными параметрами, как минимум с параметром shakeOver PHP код:
PHP код:
PHP код:
|
Ответ: Передача переменной в метод
Ещё: чтобы каждый раз не доставать экземпляр скрипта через
CameraShake shaker = camera.GetComponent<CameraShake>(); можно сделать статическую переменную в классе CameraShake и статический метод тряски, и обращаться напрямую через имя класса: PHP код:
|
Ответ: Передача переменной в метод
Жека огромное спасибо, все доходчиво! На основе советов сделал целый класс который передается в функцию с разными наборами параметров для тряски, не только длительность но и другие
)). Сейчас встал в ступор снова. Задача, рейкастом выделить объекты на плоскости. Написал код, рейкаст исправно отрисовывает курсор в месте пересечения, но ни в какую не ловит объекты, которые на нем расположены. В чем беда? Layer стоит у объектов Default PHP код:
|
Ответ: Передача переменной в метод
Цитата:
|
Ответ: Передача переменной в метод
Цитата:
|
Ответ: Передача переменной в метод
Есть какая-нибудь альтернатива использовать GameObject.FindGameObjectsWithTag для заполнения списка List<>, а не массива []? Делаю через промежуточный массив, но понимаю что тем самым удваиваю нагрузку на память.
PHP код:
|
Ответ: Передача переменной в метод
Цитата:
Код:
UnitList.AddRange(GameObject.FindGameObjectsWithTag("Unit Player")); |
Ответ: Передача переменной в метод
Ребят, посоветуйте книги/статьи/материалы которые можно почитать по системам событий, делегатам, подпискам и синглтонам. Вчера уперся в стену в скрипте, понял что без понимания этих механизмов дальше в разработке не продвинусь, так как сложность взаимодействия скриптов друг с другом растет в геометрической прогрессии, а getcomponent на каждый чих скрипта делать накладно )))
Хочу разобраться в простейшем примере, уже поставил задачу. Смысл такой - есть список объектов. Нужно создать событие (выделение конкретного объекта мышкой), на которое подпишутся все остальные объекты и проделают у себя манипуляции со своими скриптами. Читал пару статей на хабре, но не могу в голове уложить алгоритм - где объявлять издателя, где производить подписку, какая роль статических классов и методов во всем этом. В общем что посоветуете? MDSN уже почитал - для восприятия сложно. |
Ответ: Передача переменной в метод
http://gameprogrammingpatterns.com/contents.html
Можно каждую главу отдельно от других читать, написано довольно хорошо и понятно (на мой взгляд). Ещё по паттернам читал книгу "банды четырёх", но не впечатлился. |
Ответ: Передача переменной в метод
такой вопрос, принципиально важно где объявлять делегат - в теле класса или вне его? Задача чтобы делегатами могли пользоваться все объекты. Проблем с видимостью не будет?
Еще момент, если одно и то же событие объявляется в скрипте, который висит на нескольких объектах - ничего страшного? или лучше создать отдельный класс где описывать события? |
Ответ: Передача переменной в метод
Цитата:
|
Ответ: Передача переменной в метод
а как выделить эвенты в отдельный класс? чтобы доступ к ним получать с разных объектов? Сделал класс
PHP код:
PHP код:
делегат объявил отдельно вне класса вот так: PHP код:
error CS0070: The event `Event_List.Event_Select_Unit' can only appear on the left hand side of += or -= when used outside of the type `Event_List' пните в нужном направлении.. )) |
Ответ: Передача переменной в метод
У меня такое ощущение, что ты не совсем понимаешь, как евенты работают, и что это вообще. Плюс ошибки, которые ты скинул, вполне ясно говорят, в чём трабла. Логично, что ты не можешь получить евент геткомпонентом. Логично, что ты не можешь его вызвать. Это не так работает. Тебе точно евенты нужны?
http://habrahabr.ru/post/213809/ http://habrahabr.ru/post/245219/ |
Ответ: Передача переменной в метод
мне важно понимать как они работают, так как логически в голове алгоритмы под них выстраиваются. Я осознаю что мое понимание делегатов и событий весьма поверхностно.
Переделал код таким образом: PHP код:
В этом коде (другой скрипт) осуществляется вызов события: PHP код:
Теперь я правильно понял логику применения событий и делегатов? Хотя бы на базовом уровне?)) |
Ответ: Передача переменной в метод
В общем да. Главное сразу приучи себя или делать проверку на null или делегат объявлять с пустышкой (по первой ссылке в комментах есть варианты, как это делать), или потом офигеешь искать, откуда эксцепшены валятся.
|
Ответ: Передача переменной в метод
Цитата:
Проверяй есть ли пересечение через "объект.bounds.Contains" и дальше двигай как тебе надо. :) Можно даже без коллайдеров использовать. Проблема будет только с тем, что надо учитывать повороты объектов. Я этот момент учел при помощи такого говнокода: Код:
_Point[0] = new Vector3(_colliderTr.bounds.center.x + _colliderTr.bounds.size.x/2, _transform.position.y, _colliderTr.bounds.center.z + _colliderTr.bounds.size.z/2); _collider был BoxCollider объекта на котором висит скрипт. _colliderTr был MeshRenderer проверяемого объекта. |
Часовой пояс GMT +4, время: 16:40. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot