文章目录
- 系统功能介绍
- 停车场全景展现
- 初始化设置
- 相机设置
- 相机管理器
- 使用方法
系统功能介绍
本系统为某停车场提供售卖相关功能。其主要功能有停车场全景展现;车位出售状态显示;车位查询;车位购买等功能。
停车场全景展现: 展现停车场平面图,并实现拖拽以及放大缩小功能。
车位出售状态显示: 按照车位不同状态展示车位出售信息,已售车位锁定、未售车位鼠标悬停高亮显示等。
车位查询功能: 提供车位查询框,通过输入车位编号将相机焦点移至相应车位,并高亮显示。
车位购买功能: 提供车位购买相应菜单按钮,并提供车位的出售功能菜单并提供本地数据记录功能,以及后续的远程数据记录功能。
系统基本功能: 提供退出系统功能。
停车场全景展现
初始化设置
建立Res文件夹,将车位原始jpg图片放入文件夹内。
选中图片,查看Inspector,将Texture Type修改为Sprite(2D and UI)。
建立空GameObject,在其下创建2D Object --> Sprite,并命名为background。
将Rotation X设置为90。
相机设置
将相机默认的天空盒改为纯色,将视角X旋转90°,并将Y轴高度调整到66。
相机管理器
相机管理器主要提供主相机的拖拽及缩放功能,代码如下:
using System;
using UnityEngine;
using UnityEngine.EventSystems;
namespace y7play
{
/// <summary>
/// 相机控制类
/// 用于控制主相机的拖拽、放大缩小等操作
/// </summary>
public class CameraController : MonoBehaviour, IDragHandler
{
public float dragSpeed;
private Vector3 p1;
private Vector3 camera_right;
private Vector3 camera_up;
public void Awake()
{
camera_right = Camera.main.transform.right;
camera_up = Camera.main.transform.up;
}
public void OnDrag(PointerEventData eventData)
{
p1 = Camera.main.transform.position
- camera_right * Input.GetAxisRaw("Mouse X") * dragSpeed * Time.timeScale * Camera.main.fieldOfView / 50
- camera_up * Input.GetAxisRaw("Mouse Y") * dragSpeed * Time.timeScale * Camera.main.fieldOfView / 50;
// 判断界面边界,防止拖拽出屏幕范围
if (Math.Abs(p1.x) < 100 && Math.Abs(p1.z) < 60)
{
Camera.main.transform.position = p1;
}
}
void Update()
{
// 鼠标滚轮的效果
// 缩小
if (Input.GetAxis("Mouse ScrollWheel") < 0)
{
if (Camera.main.fieldOfView <= 55)
Camera.main.fieldOfView += 2;
}
// 放大
if (Input.GetAxis("Mouse ScrollWheel") > 0)
{
if (Camera.main.fieldOfView > 20)
Camera.main.fieldOfView -= 2;
}
}
}
}
OnDrag方法用于计算拖拽偏移,dragSpeed用于外部设置拖拽速度,Camera.main.fieldOfView / 50用于在放大状态下使拖拽更平滑跟手。if判断用于确定屏幕边界,避免拖拽到屏幕范围外。
Update方法中主要实现了缩放功能,通过滚轮调整相机FOV视角。
使用方法
创建UI画布。
在画布下创建Image,将画布大小放大,这个图片的大小将决定拖拽范围。
将我们写好的CameraController组件添加到Canvas上。
将DragSpeed设置为1。
至此,相机控制器的配置就完成了。运行游戏,试试拖拽和缩放功能。
还可以,操作很丝滑。