2017-07-13 4 views
0

私はunity3dでゲームを作っています。私はミニマップを使ってミニマップカメラのサイズを正字の特徴で変更したいと思っています。プレイヤーと敵の距離がある値よりも大きい場合、ミニマップカメラのサイズが大きくなり、距離が何かよりも小さい場合は、サイズが小さくなりますmathf.clamp関数を使ってどのように行うことができますか?カメラのサイズはいくらかの最大値までですか?プレイヤーと敵の距離がある値よりも大きい場合、実行時にカメラの正射形のサイズを変更したいですか?

+0

'フロートDIST = Vector3.Distance(player.transform.position、enemy.transform.position)。 if(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(); 
    } 
} 
関連する問題