2017-09-11 10 views
2

こんにちは、私は作成しているRTSゲームのカメラを作成しましたが、カメラはminHightポジションにあり、変更方法を理解できません。ここでのテストのための単なる混乱は、minHightではなく与えられたmaxHight位置から開始したいコードです。あなたが最小高さまたは最大高さでそれをしたいかに応じて1または0のいずれかにライン25上の変数zoomPosの値を設定しユニティカメラの開始位置

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; 
    } 



} 

答えて

1

、あなたはStart()または単に宣言のいずれかでこれを行うことができます変数の

関数では、スクロールホイールを使用しているときに、zoomPosの値に基づいて、高さがminとmaxの間のどこかに設定され、ズームも同様に変化するためです。ゲームを実行する前にzoomPosを変更すると、デフォルトの開始高度を効果的に設定することができます。

関連する問題