CosmoSim Проблемки

Программирование на Юнити.

CosmoSim Проблемки

Сообщение Alwind 25 авг 2011, 13:21

Движется проект к первому своему релизу (раз уж он не умер, вопросы по скриптингу в нём буду ложить сюда, дабы не плодить).

Есть известный скрипт SmoothFollow, в данный момент выполняет функцию нервирования меня. Проблем с ним масса, и недостаточная плавность движений за кораблем (космосим). И то, что он зарубил часть других скриптов, вроде бы рабочих, но без адекватной плавной камеры не тестируемых.

вопрос1: Как-бы движение камеры за кораблем реализовать иначе, пробовал через другие функции сглаживания, Smooth Damp и т.д., эффекты тоже не устроили.

Синтаксис:
Используется csharp
        void Update () {
                Vector3 wantedPosition = target.TransformPoint(-2, height, -distance);
                transform.position = Vector3.Slerp (transform.position, wantedPosition, Time.deltaTime * damping);

                if (smoothRotation) {
                        Quaternion wantedRotation = Quaternion.LookRotation(target.position - transform.position, target.up);
                        transform.rotation = Quaternion.Lerp (transform.rotation, wantedRotation, Time.deltaTime * rotationDamping);
                }
               
                else transform.LookAt (target, target.up);
}


Есть реализация поворота за мышкой. Пока реализовано просто, по отклонению указателя от центра, а-ля Frelancer. Хочется сделать именно движение к "указателю мышки".

Пробовал

Синтаксис:
Используется javascript
  var playerPlane = new Plane(transform.TransformDirection(0,0,1),  transform.position+transform.TransformDirection(0,0,10));
    var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
    var hitdist = 0.0;

    if (playerPlane.Raycast (ray, hitdist)) {
        targetPoint = ray.GetPoint(hitdist);
        var targetRotation = Quaternion.LookRotation(Vector3(targetPoint.x - transform.position.x,1.5*targetPoint.y - 1.5*transform.position.y,targetPoint.z - transform.position.z));
  transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, speed * Time.deltaTime);      


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

Пробовал рэйкастить по сфере вокруг игрока, тоже не срослось, возможно косяк камеры, возможно рук.

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

вопрос3 - патиклы в unity правда такие прожорливые? Их порядка 50 на сцене, где-то по 5-10 живых частиц на каждом, включаются только в зоне видимости игрока (близко к ней), больше 5 в камере обычно не бывает. при этом профайлер тыкает пальцем в Paticles.Update и раздел посвященный им в рендере как на поедателей 20% CPU.

вопрос4 у меня вопреки описанию функции active false убивает объект так, что потом active true уже отзываются о нём NULL, это так и должно быть?

вопрос5 какие все-таки самые самые способы создания GUI для PC, а то столько calls за окошечко с кнопочками отдавать жаба душит, встроенным GUI даже не стал пользоваться, текстурами делаю.

вопрос6 курсор уходит по окошки(один раз связался со встроенным GUI, несмотря на производительность и тут засада), которые никак не хотят отрисовываться под курсором. Depth, BringBack, Layer и т.п. он судя по всему игнорируют или я их неправильно использую.

вопрос7 При импорте гладкой сферы из 3ds с бесшовной текстурой с нормалмапой или нет при освещении появляется четкая тень где-то по середине сферы, как будто шов. откуда оно?

Синтаксис:
Используется javascript
if(!war) {var pos : Rect = Rect(mousePos.x,Screen.height - mousePos.y,cursorImage.width+2,cursorImage.height+2); //draws the gui
GUI.Label(pos,cursorImage);
}


Извиняюсь за скоп вопросов, накопились. И решил перенести...
Alwind
UNец
 
Сообщения: 18
Зарегистрирован: 09 июл 2011, 17:28

Re: CosmoSim Проблемки

Сообщение artk 02 сен 2011, 22:32

Ответ 1: Если Raycasto ' м то, вроде, вместо "targetPoint = ray.GetPoint(hitdist);" надо "targetPoint = ray.point;"
Непонятно только, что вы кастите в космосе? :-?
Ответ 3: Сами источники да, а партикли в зависимости от текстур, анимации и количества. Лучше вообще отказаться от создания риалтайм источника частиц. И если у вас источники испускают одинаковые частицы, то удалите все кроме одного и, перемещая источник, создавайте частицы Emite ' ом.
У меня спокойно держит over 500 частиц без падения фпс. И тем более CPU. Хотя если задать большую анимированую текстуру с полупрозрачностью, которая закрывает весь экран, то фпс сразу в 0.

Ответ 4: "Убить" сам себя скрипт может. А вот обратно не получается. 8-x Хотя иногда выходит. )) Приходиться использовать какой-нибудь старонний "менеджер". PS Активом убивает не полностью, иожно свободно изменять переменныи.

У меня свой вопрос в тему 5-го:
В профайлере появились 2 странных процесса - GUIUtility.BeginGIU() в GUI.ProcessEvents и в GUI.Repain, каждый из которых жрет 37% CPU !!! :-ss
WTF? Непонятно откуда они вызываются и ни у кого не видел таких вообще.
Аватара пользователя
artk
Старожил
 
Сообщения: 749
Зарегистрирован: 22 май 2011, 12:22


Вернуться в Скрипты

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9