Как сделать чтобы объект вращался с камерой в unity

Как сделать чтобы объект вращался с камерой в unity
Как сделать чтобы объект вращался с камерой в unity
Как сделать чтобы объект вращался с камерой в unity
Как сделать чтобы объект вращался с камерой в unity
Как сделать чтобы объект вращался с камерой в unity

Здравствуйте! Путаюсь разобраться как вращать камеру вокруг объекта. В скрипте камера установлена в определенное положение. Но когда я делаю первое движение мышкой(чтобы двигать камеру), камера перемещается в другую позицию(она указана в строке:Vector3 pos = Quaternion.Euler(y, x, 0) new Vector3(0, 0, -distance) + meshPosition) и из нее уже двигается. Само вращение работает хорошо, проблема в том чтобы начать движение от позиции камеры, а не камеру передвинуть в начальную позицию.

using UnityEngine; using UnityEditor; public class MeshPreviewTest : EditorWindow { Mesh renderedMesh; Material renderedMaterial; Vector2 scrollPos; Vector2 previewDimensions = new Vector2(512, 512); private GameObject cam = null; private GameObject _light = null; private bool started = false; public float yMinLimit = -20f; public float yMaxLimit = 80f; public float distance = 5.0f; public float xSpeed = 0.2f; public float ySpeed = 0.2f; public Vector3 meshPosition = Vector3.zero; float x = 0.0f; float y = 0.0f; public float scrollSpeed = 1.0f; public float zoomMin = 1.0f; public float zoomMax = 20.0f; public Vector3 CameraPosition; Quaternion rotation; Material skyMat = (Material)Resources.Load("Skybox", typeof(Material)); private Camera Camera { get { if (cam == null) { cam = new GameObject(); cam.hideFlags = HideFlags.HideAndDontSave; cam.transform.position = new Vector3(-3.0f,3.0f, 2.0f); cam.transform.eulerAngles = new Vector3(19.0f, -5.0f, 0.0f); cam.AddComponent<Camera>(); cam.GetComponent<Camera>().fieldOfView = 60; cam.GetComponent<Camera>().depth = -2; cam.AddComponent<Skybox>(); cam.GetComponent<Skybox>().material = skyMat; } return cam.GetComponent<Camera>(); } } private Mesh bgMesh = null; private Mesh BackgroundMesh { get { if (bgMesh == null) { bgMesh = Resources.Load("box", typeof(Mesh)) as Mesh; } return bgMesh; } } private Material bgmat = null; private Material BackgroundMaterial { get { if (bgmat == null) { bgmat = new Material(Shader.Find("Transparent/VertexLit")); bgmat.color = new Color(0.5f, 0.5f, 0.5f, 0.25f); } return bgmat; } } [MenuItem("Window/Mesh Preview")] public static void ShowWindow() { // Show existing window instance. If one doesn't exist, make one. EditorWindow.GetWindow<MeshPreviewTest>(); } void Update() { Camera.transform.LookAt(meshPosition); } public 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); } public static float ZoomLimit(float dist, float min, float max) { if (dist < min) dist = min; if (dist > max) dist = max; return dist; } void OnGUI() { Event e = Event.current; if (!started) { Vector3 angles = Camera.transform.eulerAngles; x = angles.x; y = angles.y; Debug.Log(Camera.transform.position.ToString() + " -- " + Camera.transform.eulerAngles.ToString()); } started = true; scrollPos = GUILayout.BeginScrollView(scrollPos); GUILayout.BeginVertical(); if (e.button == 0 && e.type == EventType.MouseDrag) { x += e.delta.x xSpeeddistance; y -= e.delta.y ySpeed ; e.delta = Vector2.zero; Quaternion rot = Quaternion.Euler(y, x, 0); Vector3 negDist = new Vector3(0, 0, -distance); Vector3 pos = rot negDist + meshPosition; Camera.transform.rotation = rot; Camera.transform.position = pos; Repaint(); Debug.Log(Camera.transform.position.ToString() + " -- " + Camera.transform.eulerAngles.ToString()); } else if (e.type == EventType.ScrollWheel) { distance = Vector3.Distance(Camera.transform.position, meshPosition); distance = ZoomLimit(distance - e.delta.y scrollSpeed, zoomMin, zoomMax); CameraPosition = -(Camera.transform.forward distance) + meshPosition; Camera.transform.position = CameraPosition; Repaint(); } Quaternion previewRotation = Quaternion.identity; previewRotation.eulerAngles = new Vector3(0.0f, -45.0f, 0.0f); Graphics.DrawMesh(BackgroundMesh, meshPosition, previewRotation, BackgroundMaterial, 0, Camera); GUI.BeginGroup(GUILayoutUtility.GetRect(previewDimensions.x, previewDimensions.y)); Handles.BeginGUI(); Handles.DrawCamera(new Rect(0, 0, previewDimensions.x, previewDimensions.y), Camera, DrawCameraMode.Normal); Handles.EndGUI(); GUI.EndGroup(); GUILayout.EndVertical(); GUILayout.EndScrollView(); } } Как сделать чтобы объект вращался с камерой в unity Как сделать чтобы объект вращался с камерой в unity Как сделать чтобы объект вращался с камерой в unity Как сделать чтобы объект вращался с камерой в unity Как сделать чтобы объект вращался с камерой в unity Как сделать чтобы объект вращался с камерой в unity Как сделать чтобы объект вращался с камерой в unity Как сделать чтобы объект вращался с камерой в unity Как сделать чтобы объект вращался с камерой в unity

Похожие статьи:




Как сделать индексированную ссылку




Схемы подключения сигнализации на ваз 21093




Для слепых детей своими руками картинки




На любовь рисунки схемы




Схема вязания платьев для куклы барби