проблема в том что cam.position = Vector3.Lerp(cam.position, new_cam_position, Time.time * 0.01f); переписывает старые координаты камеры, и не отталкивается от новых. Если Я правильно понимаю, должны сначала примениться трансформации корневога элемента, он передвинет камеру, а потом уже отталкиваясь от новых координат камеры - трансформировать дистанцию до ротатора. Физики никакой нету у меня. Про localPosition почитаю, интересный вариант. Зум через ФОВ - это неправильно, потому как камера не ортографическая - будут искажения. Компонент левых никаких нету, скрипт вешается на корневой элемент.
Используется csharp
using UnityEngine;
using System.Collections;
public class Camera_mover : MonoBehaviour
{
public float distance = 50;
public float scroll_speed = 100f;
public float move_speed = 100f;
public float xSpeed = 100f;
public float ySpeed = 100f;
public float yMinLimit = -20f;
public float yMaxLimit = 80f;
public float zoom = 0;
public bool isZooming = false;
public enum direction { fwd, bwd };
public direction dir = direction.fwd;
public Transform cam;
public Transform rotator;
public Transform me;
public Vector3 viewport_mp;
private float x = 0f;
private float y = 0f;
private Vector3 move_direction;
static float ClampAngle(float angle, float min, float max)
{
if (angle < -360f)
angle += 360f;
if (angle > 360f)
angle -= 360f;
return Mathf.Clamp(angle, min, max);
}
void Update()
{
if ((Input.GetKey(KeyCode.S)))
me.position -= me.forward * Time.deltaTime * move_speed;
if ((Input.GetKey(KeyCode.W)))
me.position += me.forward * Time.deltaTime * move_speed;
if ((Input.GetKey(KeyCode.A)))
me.position -= me.right * Time.deltaTime * move_speed;
if ((Input.GetKey(KeyCode.D)))
me.position += me.right * Time.deltaTime * move_speed;
if (Input.GetButton("Fire2"))
{
x += Input.GetAxis("Mouse X") * xSpeed * Time.deltaTime;
y -= Input.GetAxis("Mouse Y") * ySpeed * Time.deltaTime;
y = ClampAngle(y, yMinLimit, yMaxLimit);
rotator.Rotate(-Input.GetAxis("Mouse Y") * 10, 0, 0, Space.Self);
me.Rotate(0, Input.GetAxis("Mouse X") * 10, 0, Space.World);
}
Vector3 new_cam_position = cam.forward * -distance;
//cam.localPosition = new_cam_position;
cam.position = new_cam_position;
}
}
Transform me - это корень
Transform rotator - средний (ротатор)
Transform cam - собсно камера
вот кому не лень можете попробовать ) в таком состоянии скрипт не работает, если раскомментить localPosition и закоментить position - все почти норм, только камера не туда куда на до поворачивается, но это не страшно ))
так что можно сказать что проблема решена, спасибо )