摄像机响应用户操作移动

作者: amosbake | 来源:发表于2017-12-24 23:47 被阅读24次

项目地址
素材包

镜头控制插件

目标

在RTS游戏和一些需要显示地图的RPG游戏中,常常出现用鼠标和键盘的方向键操作 玩家镜头的移动,从而达到自由观看游戏场景的效果
本篇的目标就是实现这一效果

  1. wasd 分别对应镜头的 上,左,下,右 移动
  2. 鼠标移动到屏幕边缘时, 镜头向对应方向卷动
  3. 滚动鼠标滚轮时, 视角拉近,拉远

API

  1. 获取键盘按键: Input.GetKey("w")
  2. 获取鼠标位置: Input.mousePosition
  3. 获取屏幕大小: Screen.width/Screen.height
  4. 限制值的范围: Mathf.Clamp(value,min,max)

实际应用:

  1. 将场景的摄像机调节成 x增大 镜头左移, z增大 镜头上移, y增大 镜头拉远. 并对摄像机添加脚本CameraController
  2. 创建镜头滚动的配置参数: PanSpeed(镜头移动速度), ScrollSpeed(镜头深度变化速度)等
  3. 在Update()方法中 添加对应键盘,鼠标事件的监听,并对保存的镜头position临时变量赋值
  4. 确认position的边界条件,再设置到镜头的Transform中

CameraController


using UnityEngine;

public class CameraController : MonoBehaviour
{
    public float PanSpeed = 20f;
    public float ScrollSpeed = 20f;
    public float PanBoarderThiness = 100f;

    public Vector2 PanLimit;
    public float MinY = 20f;
    public float MaxY = 100f;

    void Update()
    {
        Vector3 pos = transform.position;

        if (Input.GetKey("w") || MouseAtScreenTopEdge())
        {
            pos.z += PanSpeed * Time.deltaTime;
        }
        if (Input.GetKey("s") || MouseAtScreenBottomEdge())
        {
            pos.z -= PanSpeed * Time.deltaTime;
        }
        if (Input.GetKey("a") || MouseAtScreenLeftEdge())
        {
            pos.x -= PanSpeed * Time.deltaTime;
        }
        if (Input.GetKey("d") || MouseAtScreenRightEdge())
        {
            pos.x += PanSpeed * Time.deltaTime;
        }
        float scroll = Input.GetAxis("Mouse ScrollWheel");
        pos.y +=  scroll * ScrollSpeed * Time.deltaTime;

        pos.x = Mathf.Clamp(pos.x, -PanLimit.x, PanLimit.x);
        pos.z = Mathf.Clamp(pos.z, -PanLimit.y, PanLimit.y);
        pos.y =  Mathf.Clamp(pos.y,MinY,MaxY);

        transform.position = pos;
    }

    bool MouseAtScreenTopEdge()
    {
        return Input.mousePosition.y >= Screen.height - PanBoarderThiness && Input.mousePosition.y <= Screen.height;
    }

    bool MouseAtScreenBottomEdge()
    {
        return Input.mousePosition.y <= PanBoarderThiness && Input.mousePosition.y >= 0;
    }

    bool MouseAtScreenLeftEdge()
    {
        return Input.mousePosition.x <= PanBoarderThiness && Input.mousePosition.x >= 0;
    }

    bool MouseAtScreenRightEdge()
    {
        return Input.mousePosition.x >= Screen.width - PanBoarderThiness && Input.mousePosition.x <= Screen.width;
    }

}

相关文章

  • 摄像机响应用户操作移动

    项目地址素材包 镜头控制插件 目标 在RTS游戏和一些需要显示地图的RPG游戏中,常常出现用鼠标和键盘的方向键操作...

  • iOS基础06—--事件响应链

    iOS基础06—--事件响应链 移动应用的最大特性就是响应用户交互操作,那么iOS系统是如何去响应一个简单的点击事...

  • 智能灯具_参数

    获取灯具信息 用户离开 异常响应 普通操作响应

  • Unity 打倒围墙(简单)

    一共用到三个脚本:CameraController.cs -> 给摄像机移动操作(左右前后移动、左右旋转)Wall...

  • 用户体验重要一环 :App中的反馈设计

    什么是反馈? 反馈就是用户做了某项操作之后,应用系统给用户的一个响应。这个响应根据场景的不同会有不同的响应形式和不...

  • 7.12 反馈设计

    mp.weixin.qq.com/s 用户需要反馈以获得操作响应。 反馈的意义:告知用户所在的位置 所处的操作 允...

  • 事件绑定的原理,冒泡与捕获概念.

    要想Javascript对用户的操作做出响应,首先要对DOM元素绑定事件处理函数。所谓处理函数,就是处理用户操作的...

  • iOS手势介绍

    ios中只要继承UIResponse对象的都能成为事件的响应者,当用户操作手机屏幕时,所操作的控件就是第一响应者,...

  • Android性能优化(上)

    性能优化的概念 响应时间 响应时间: 从用户操作开始到系统给用户以正确反馈的时间。 一般包括逻辑处理时间 + 网络...

  • Cocos Creator之添加按钮

    按钮组件 Button 组件可以响应用户的点击操作,当用户点击 Button 时,Button 自身会有状态变化。...

网友评论

    本文标题:摄像机响应用户操作移动

    本文链接:https://www.haomeiwen.com/subject/aajkgxtx.html