首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单机启动位置

单机启动位置
EN

Stack Overflow用户
提问于 2017-09-11 19:21:42
回答 1查看 1.6K关注 0票数 3

你好,所以我为我正在制作的RTS游戏创建了一个相机,但是在开始的时候,相机是在minHight位置上,我不知道如何改变它,希望有人帮助代码有点混乱,这只是为了测试,这里是我希望它从maxHight位置开始的代码,这个位置是给定的,而不是在minHight上。

代码语言:javascript
复制
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;
    }



}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-11 20:03:31

将第25行中的变量zoomPos的值设置为1或0,这取决于您希望它位于最小高度还是最大高度,您可以在Start()中或仅在变量的声明中这样做。

这是因为在HeightCalculation函数中,它根据zoomPos的值将高度设置在最小和最大之间的某个位置,因为使用滚动轮时,这个值会发生变化,缩放也会发生变化。在您运行游戏之前更改zoomPos允许您有效地设置默认的起始高度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46163008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档