• 【Unity】Unity3D 车位售卖系统制作实例(一)系统介绍及相机控制器



    系统功能介绍

    本系统为某停车场提供售卖相关功能。其主要功能有停车场全景展现;车位出售状态显示;车位查询;车位购买等功能。

    停车场全景展现: 展现停车场平面图,并实现拖拽以及放大缩小功能。
    车位出售状态显示: 按照车位不同状态展示车位出售信息,已售车位锁定、未售车位鼠标悬停高亮显示等。
    车位查询功能: 提供车位查询框,通过输入车位编号将相机焦点移至相应车位,并高亮显示。
    车位购买功能: 提供车位购买相应菜单按钮,并提供车位的出售功能菜单并提供本地数据记录功能,以及后续的远程数据记录功能。
    系统基本功能: 提供退出系统功能。

    在这里插入图片描述

    停车场全景展现

    初始化设置

    建立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;
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    OnDrag方法用于计算拖拽偏移,dragSpeed用于外部设置拖拽速度,Camera.main.fieldOfView / 50用于在放大状态下使拖拽更平滑跟手。if判断用于确定屏幕边界,避免拖拽到屏幕范围外。

    Update方法中主要实现了缩放功能,通过滚轮调整相机FOV视角。

    使用方法

    创建UI画布。
    在这里插入图片描述

    在画布下创建Image,将画布大小放大,这个图片的大小将决定拖拽范围。
    在这里插入图片描述

    将我们写好的CameraController组件添加到Canvas上。
    在这里插入图片描述

    将DragSpeed设置为1。
    在这里插入图片描述
    至此,相机控制器的配置就完成了。

    运行游戏,试试拖拽和缩放功能吧。


    更多内容请查看总目录【Unity】Unity学习笔记目录整理

  • 相关阅读:
    SpringBoot多模块项目中无法注入其他模块中bean
    串口发送&串口发送+接收&串口收发HEX数据包&串口收发文本数据包----USART
    win7录屏软件哪个好用?盘点3款实用软件
    Pytorch深度学习——优化算法、数据集类、数据加载器 05(未完)
    RK3588 Android13 鼠标风格自定义动态切换
    Python基础语法
    【C语言】指针的入门详细介绍
    【学习草稿】
    Emmabuntüs Debian Edition 5 正式发布
    uniapp实现我的订单页面无感 - 删除数据
  • 原文地址:https://blog.csdn.net/xiaoyaoACi/article/details/125425995