如何在Unity中限制/限制RotateAround来移动相机?

时间:2018-10-21 22:03:25

标签: unity3d unityscript

我有一个带有地球仪的场景,其中相机围绕地球仪旋转。在游戏的某些情况下,我需要限制此运动的位置和旋转。我尝试了几种方法,但是都没有用。我的代码如下:

  private void LateUpdate()
 {     
     if (Input.GetMouseButtonDown(1))
         mouseStartPosition = GetMouseHit();          

     if (mouseStartPosition != null)
         DragPlanet();    

     if (Input.GetMouseButtonUp(1))
         StaticPlanet();  
 }


 public void RotateCamera(Vector3 dragStartPosition, Vector3 dragEndPosition)
 {

     //normalised for odd edges
     dragEndPosition = dragEndPosition.normalized *planetRadius;
     dragStartPosition = dragStartPosition.normalized * planetRadius;

     // Cross Product
     Vector3 cross = Vector3.Cross(dragEndPosition, dragStartPosition);

     // Angle for rotation
     float angle = Vector3.SignedAngle(dragEndPosition, dragStartPosition, cross);


     //Causes Rotation of angle around the vector from Cross product
     holderTransform.RotateAround(planet.transform.position, cross, angle);
 }


 private static Vector3? GetMouseHit()
 {
     RaycastHit hit;
     int layer_mask = LayerMask.GetMask("Planet"); //raycasting on the planet
     if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, Mathf.Infinity, layer_mask))
     {
         return hit.point;

0 个答案:

没有答案