2017-09-11 2 views
2

Bonjour donc j'ai créé une caméra pour un jeu RTS que je fais mais au démarrage, la caméra est sur la position minHight et je n'arrive pas à comprendre comment la changer espère que quelqu'un aide le code est un peu gâcher son juste pour un test ici est le code que je veux qu'il commence à partir de la position maxHight qui est donnée et non sur le minHight.Unity position de départ de la caméra

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class RtsCamera : MonoBehaviour { 


    public float zoomSensitivy = 15; 
    private Transform m_Transform; 
    public float screenEdgeBorder = 25f; 
    public bool useScreenEdgeInput = true; 
    public float screenEdgeMovementSpeed = 3f; 

    // zoom stuff 
    public float heightDampening = 5f; 
    public float scrollWheelZoomingSensitivity = 25f; 
    public float maxHeight = 10f; //maximal height 
    public float minHeight = 15f; //minimnal height 
    public LayerMask groundMask = -1; 
    public bool autoHeight = true; 
    public bool limitMap = true; 
    public float limitX = 50f; //x limit of map 
    public float limitZ = 50f; //z limit of map 
    private float zoomPos = 0; //value in range (0, 1) used as t in Matf.Lerp 
    public bool useScrollwheelZooming = true; 

    Vector3 tempPos; 


    public string zoomingAxis = "Mouse ScrollWheel"; 

    private float ScrollWheel 
    { 
     get { return Input.GetAxis(zoomingAxis); } 
    } 

    private Vector2 MouseAxis 
    { 
     get { return new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")); } 
    } 
    private Vector2 MouseInput 
    { 
     get { return Input.mousePosition; } 
    } 


    private void Start() 
    { 

     m_Transform = transform; 

    } 
    // Update is called once per frame 
    void Update() { 
     Move(); 
     LimitPosition(); 
     HeightCalculation(); 







    } 
    private void Move() 
    { 


     if (useScreenEdgeInput) 
     { 
      Vector3 desiredMove = new Vector3(); 

      Rect leftRect = new Rect(0, 0, screenEdgeBorder, Screen.height); 
      Rect rightRect = new Rect(Screen.width - screenEdgeBorder, 0, screenEdgeBorder, Screen.height); 
      Rect upRect = new Rect(0, Screen.height - screenEdgeBorder, Screen.width, screenEdgeBorder); 
      Rect downRect = new Rect(0, 0, Screen.width, screenEdgeBorder); 

      desiredMove.x = leftRect.Contains(MouseInput) ? -1 : rightRect.Contains(MouseInput) ? 1 : 0; 
      desiredMove.z = upRect.Contains(MouseInput) ? 1 : downRect.Contains(MouseInput) ? -1 : 0; 

      desiredMove *= screenEdgeMovementSpeed; 
      desiredMove *= Time.deltaTime; 
      desiredMove = Quaternion.Euler(new Vector3(0f, transform.eulerAngles.y, 0f)) * desiredMove; 
      desiredMove = m_Transform.InverseTransformDirection(desiredMove); 

      m_Transform.Translate(desiredMove, Space.Self); 
     } 

    } 
    private void LimitPosition() 
    { 
     if (!limitMap) 
      return; 

     m_Transform.position = new Vector3(Mathf.Clamp(m_Transform.position.x, -limitX, limitX), 
      m_Transform.position.y, 
      Mathf.Clamp(m_Transform.position.z, -limitZ, limitZ)); 
    } 

    private void HeightCalculation() 
    { 
     float distanceToGround = DistanceToGround(); 
     if (useScrollwheelZooming) 
      zoomPos += ScrollWheel * Time.deltaTime * scrollWheelZoomingSensitivity; 


     zoomPos = Mathf.Clamp01(zoomPos); 

     float targetHeight = Mathf.Lerp(minHeight, maxHeight, zoomPos); 
     float difference = 0; 

     if (distanceToGround != targetHeight) 
      difference = targetHeight - distanceToGround; 

     m_Transform.position = Vector3.Lerp(m_Transform.position, 
      new Vector3(m_Transform.position.x, targetHeight + difference, m_Transform.position.z), Time.deltaTime * heightDampening); 
    } 
    private float DistanceToGround() 
    { 
     Ray ray = new Ray(m_Transform.position, Vector3.down); 
     RaycastHit hit; 
     if (Physics.Raycast(ray, out hit, groundMask.value)) 
      return (hit.point - m_Transform.position).magnitude; 

     return 0f; 
    } 



} 

Répondre

1

Définissez la valeur de la zoomPos variable sur la ligne 25 à 1 ou 0 selon que vous voulez à la hauteur min ou la hauteur max, vous pouvez le faire soit dans le Start() ou tout simplement à la déclaration de la variable. Ceci est dû au fait que dans la fonction HeightCalculation, la hauteur est comprise entre zoomPos et que la valeur de cette variable change, tout comme le zoom. Modifier zoomPos avant d'exécuter le jeu vous permet de définir efficacement une hauteur de départ par défaut.