2017-07-13 27 views
0

我在unity3d上製作遊戲。我正在使用迷你地圖,在那裏我想要改變我的迷你地圖相機的大小和正交功能。如果玩家和敵人之間的距離大於某個值,那麼迷你地圖相機的尺寸會更大,如果距離小於某個尺寸,那麼尺寸會更小,我如何使用mathf.clamp函數來做到這一點,如果我們限制相機大小到一些最大值?如果玩家與敵人之間的距離大於某個值,想要在運行時更改相機的拼圖尺寸?

+0

'浮子DIST = Vector3.Distance(player.transform.position,enemy.transform.position);如果(dist <5.0f)camera.orthographicSize = 1.0f;'? –

回答

0

此視頻正在解決您想要的相同問題。這裏是鏈接這將幫助你。

https://www.youtube.com/watch?v=llEJtLuQyPM&index=3&list=PLclF8feY8EKLw5Un6Z2Syt2_35qsdpnHt

using UnityEngine; 

public class CameraControl : MonoBehaviour 
{ 
    public float m_DampTime = 0.2f;     
    public float m_ScreenEdgeBuffer = 4f;   
    public float m_MinSize = 6.5f;     
    [HideInInspector] public Transform[] m_Targets; 


    private Camera m_Camera;       
    private float m_ZoomSpeed;      
    private Vector3 m_MoveVelocity;     
    private Vector3 m_DesiredPosition;    


    private void Awake() 
    { 
     m_Camera = GetComponentInChildren<Camera>(); 
    } 


    private void FixedUpdate() 
    { 
     Move(); 
     Zoom(); 
    } 


    private void Move() 
    { 
     FindAveragePosition(); 

     transform.position = Vector3.SmoothDamp(transform.position, m_DesiredPosition, ref m_MoveVelocity, m_DampTime); 
    } 


    private void FindAveragePosition() 
    { 
     Vector3 averagePos = new Vector3(); 
     int numTargets = 0; 

     for (int i = 0; i < m_Targets.Length; i++) 
     { 
      if (!m_Targets[i].gameObject.activeSelf) 
       continue; 

      averagePos += m_Targets[i].position; 
      numTargets++; 
     } 

     if (numTargets > 0) 
      averagePos /= numTargets; 

     averagePos.y = transform.position.y; 

     m_DesiredPosition = averagePos; 
    } 


    private void Zoom() 
    { 
     float requiredSize = FindRequiredSize(); 
     m_Camera.orthographicSize = Mathf.SmoothDamp(m_Camera.orthographicSize, requiredSize, ref m_ZoomSpeed, m_DampTime); 
    } 


    private float FindRequiredSize() 
    { 
     Vector3 desiredLocalPos = transform.InverseTransformPoint(m_DesiredPosition); 

     float size = 0f; 

     for (int i = 0; i < m_Targets.Length; i++) 
     { 
      if (!m_Targets[i].gameObject.activeSelf) 
       continue; 

      Vector3 targetLocalPos = transform.InverseTransformPoint(m_Targets[i].position); 

      Vector3 desiredPosToTarget = targetLocalPos - desiredLocalPos; 

      size = Mathf.Max (size, Mathf.Abs (desiredPosToTarget.y)); 

      size = Mathf.Max (size, Mathf.Abs (desiredPosToTarget.x)/m_Camera.aspect); 
     } 

     size += m_ScreenEdgeBuffer; 

     size = Mathf.Max(size, m_MinSize); 

     return size; 
    } 


    public void SetStartPositionAndSize() 
    { 
     FindAveragePosition(); 

     transform.position = m_DesiredPosition; 

     m_Camera.orthographicSize = FindRequiredSize(); 
    } 
}