Есть известный скрипт 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);
}
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);
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);
}
GUI.Label(pos,cursorImage);
}
Извиняюсь за скоп вопросов, накопились. И решил перенести...