2017-02-22 50 views
0

Вот оно. У меня есть анатомия человека, и я хотел бы повернуть камеру, когда я прикасаюсь к ней где угодно. но глядя на анатомию человека. как я могу это сделать :(Поворот камеры при касании единства 3d

[https://www.youtube.com/watch?v=EfYeL2FYyyA&t=148s] это то, что именно я действительно хотел, пожалуйста, помогите мне!

` 

    using UnityEngine; 
    using System.Collections; 
    [AddComponentMenu("Camera-Control/Mouse Orbit with zoom")] 
    public class MouseOrbitImproved : MonoBehaviour { 
public Transform target; 
public float distance = 5.0f; 
public float xSpeed = 120.0f; 
public float ySpeed = 120.0f; 

public float yMinLimit = -20f; 
public float yMaxLimit = 80f; 
public float distanceMin = .5f; 
public float distanceMax = 15f; 
private Rigidbody rigidbody; 
float x = 0.0f; 
float y = 0.0f; 
// Use this for initialization 
void Start() 
{ 
    Vector3 angles = transform.eulerAngles; 
    x = angles.y; 
    y = angles.x; rigidbody = GetComponent<Rigidbody>(); 
    // Make the rigid body not change rotation 
    if (rigidbody != null) 
    { 
     rigidbody.freezeRotation = true; 
    } 
} 
void LateUpdate() 
{ 
    if (target) 
    { 
     x += Input.GetAxis("Mouse X") * xSpeed * distance * 0.02f; 
     y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f; 
     y = ClampAngle(y, yMinLimit, yMaxLimit); 
     Quaternion rotation = Quaternion.Euler(y, x, 0); 
     distance = Mathf.Clamp(distance - Input.GetAxis("Mouse ScrollWheel")*5, distanceMin, distanceMax); 
     RaycastHit hit; 
     if (Physics.Linecast (target.position, transform.position, out hit)) 
     { 
      distance -= hit.distance; 
     } 
     Vector3 negDistance = new Vector3(0.0f, 0.0f, -distance); 
     Vector3 position = rotation * negDistance + target.position; 
     transform.rotation = rotation; 
     transform.position = position; 
    } 
} 
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); 
}} 
+1

Пожалуйста, взгляните на [Как спросить] (http://stackoverflow.com/help/how-to-ask), добавьте форматирование кода и укажите, какую именно проблему _programming_ вы пытаетесь решить. Например. «Я пытаюсь сделать эту структуру такой, и она должна работать в соответствии с этой (ссылкой) документацией, но это не так». – yeputons

ответ

1

Вы можете использовать трюк вместо того, чтобы использовать слишком много «математику» в этом случае.

Там будет пустые геймобжекты в каждом из элемента, который вы хотите, чтобы ваша камера вращаться вокруг, позволяет называть этот «якорь»

Когда выбран элемент, вы просто сделать камеру ребенок якоря.

И если вы просто вращаете якорь, ваша камера будет вращаться, потому что это ребенок.

Это даст вам эффект.

Here - простой пример из youtube для вращения объекта.

Here - еще один ответ от Unity.

Надеюсь, это поможет! Ура!

+0

Спасибо! я попробую –