UNITY-RTS游戏制作(1):Camera

目前正在自学unity,打算一边学习,一边试着自己写一个rts的war gaming。

在进入正式的游戏之前,需要先制作游戏内的相机,控制镜头。

1.先插入一个Terrain object作为地面。方便观察摄像头的移动

1.PNG

2.在Scripts文件夹中新建C# script文件,命名为CameraMoveController。把它拖到main camera上,在摄像头上添加Script Component。

2.PNG

3.代码部分

1.定义三个变量
    private float speed = 10.0f;
    private float zoomSpeed = 600.0f;
    private float rotateSpeed = 70f;

然后通过Input.GetAsix()获取wasd和鼠标滚轮的输入。

void Update()
{
        float horizontalInput = transform.position.y * Input.GetAxis("Horizontal");
        float verticalInput = transform.position.y * Input.GetAxis("Vertical");
        float scrollInput = -Mathf.Log(transform.position.y) * Input.GetAxis("Mouse ScrollWheel");
}

计算相机forward,right,vertical三个方向的位移

void Update()
{
        //.......
        Vector3 forwardMove = transform.forward;
        forwardMove.y = 0;
        forwardMove.Normalize();
        forwardMove *= verticalInput * speed * Time.deltaTime;
        Vector3 verticalMove = new Vector3(0, scrollInput * zoomSpeed * Time.deltaTime, 0);
        Vector3 rightMove = transform.right * horizontalInput * speed * Time.deltaTime;
}

在将三个Vector3相加,作为相机最后的位移

void Update()
{
        //.......
        Vector3 move = verticalMove + forwardMove + rightMove;
        transform.position += move;
}

这个时候运行就可以移动Camera了,但我们还希望摄像头可以左右上下旋转。

2.让Camera可以旋转

现在start中获取相机的rotation角度

    void Start()
    {
        Vector3 rot = transform.eulerAngles;
        rotationX = rot.x;
        rotationY = rot.y;
    }

我们希望按下鼠标中键的时候可以旋转摄像头,还是通过Input.GetAxis()函数获取鼠标的在x和y方向上的位移。

void Update()
{
        if (Input.GetMouseButton(2))
        {
            float mouseX = Input.GetAxis("Mouse X");
            float mouseY = -Input.GetAxis("Mouse Y");
            RotateCamera(mouseX, mouseY);
        }
}

获得位移后,很容易就可以计算出我们需要旋转的方向。


    void RotateCamera(float mouseX, float mouseY)
    {
        rotationY += mouseX * rotateSpeed * 0.02f;
        rotationX += mouseY * rotateSpeed * 0.02f;

        transform.rotation = Quaternion.Euler(rotationX, rotationY, 0.0f);
    }

4.完成

运行就可以通过wasd前后左右移动摄像头,鼠标滚轮上下缩放摄像头了。有点像total war的。还可以加入minHeight,maxHeight来限制缩放的极限。参考视屏:Unity RTS - Camera Tutorial

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容