日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity2D 简易2D地图 —— 地图的显示

發布時間:2024/3/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity2D 简易2D地图 —— 地图的显示 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

剛剛接觸Unity,新手入門,項目為GIS類應用,包括地圖的顯示,漫游和縮放等功能,記錄如下:

1.新建Unity2D項目,準備好一張世界地圖

2.建立空物體,命名為MapView,把上面的圖片拖放到MapView下面(Scale的設置自己調整,最好高度與camera差不多,并且添加一個BoxCollider2D的組件)

顯示如下:

3.接下來我們需要控制地圖的縮放、漫游拖動效果,在MapView上掛載MapView.cs來控制,代碼部分如下:


using System.Collections.Generic;
using UnityEngine;

public class MapView : MonoBehaviour
{
? ? public Camera m_camera;
? ? public float moveSpeed = 0.001f;

? ? private Vector3 mouseFirstPos = Vector3.zero;// 鼠標第一位置點【長按拖動】
? ? private GameObject mapview;
?? ?float camara_min = 0.001f;
?? ?float camara_max = 5f;
?? ?float aspectRatio = 1f; //屏幕寬高比
?? ?float earth_width = 1f; //地圖的寬度
?? ?float earth_height = 1f;//地圖的高度
?? ?float truemapscale = 1f;//實際地圖與顯示地圖的比例

?? ?// Start is called before the first frame update
?? ?void Start()
? ? {
?? ??? ?aspectRatio = Screen.width * 1.0f / Screen.height;

? ? ? ? mapview = GameObject.Find("MapView");
?? ??? ?GameObject earth = GameObject.Find("Earth4");
?? ??? ?BoxCollider2D box2d = earth.GetComponent<BoxCollider2D>();
?? ??? ?earth_width = box2d.size.x * earth.transform.localScale.x;
?? ??? ?earth_height = box2d.size.y * earth.transform.localScale.x;
?? ??? ?truemapscale = earth_height / 180f;
?? ??? ?LoadAirport();
?? ?}

? ? // Update is called once per frame
? ? void Update()
? ? {
?? ??? ?if (!ExistPopups()) //PS:該部分代碼可忽略,是我用來控制彈出窗體后禁用的,可不判斷
?? ??? ?{
?? ??? ??? ?//長按
?? ??? ??? ?if (Input.GetMouseButton(0) || Input.GetMouseButton(1))
?? ??? ??? ?{
?? ??? ??? ??? ?if (mouseFirstPos != Vector3.zero && mouseFirstPos != Input.mousePosition)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?var position = new Vector2(Input.mousePosition.x - mouseFirstPos.x, Input.mousePosition.y - mouseFirstPos.y);
?? ??? ??? ??? ??? ?if (Input.GetMouseButton(0))
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?DragMove(position);
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?mouseFirstPos = Input.mousePosition;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?else
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?mouseFirstPos = Input.mousePosition;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?//鼠標抬起事件
?? ??? ??? ?if (Input.GetMouseButtonUp(0) || Input.GetMouseButtonUp(1))
?? ??? ??? ?{
?? ??? ??? ??? ?mouseFirstPos = Vector3.zero;
?? ??? ??? ?}

?? ??? ??? ?//鼠標滑輪滾動
?? ??? ??? ?if (Input.GetAxis("Mouse ScrollWheel") != 0)
?? ??? ??? ?{
?? ??? ??? ??? ?float swheel = Input.GetAxis("Mouse ScrollWheel") > 0 ? 0.1f : -0.1f;
?? ??? ??? ??? ?ZoomInOut(m_camera.orthographicSize - swheel * m_camera.orthographicSize / 5);
?? ??? ??? ?}

?? ??? ?}
?? ??? ?
? ? }

?? ?/// <summary>
?? ?/// 鼠標拖動【相機】
?? ?/// </summary>
?? ?/// <param name="position"></param>
?? ?void DragMove(Vector2 position)
?? ?{
?? ??? ?float bs = 5 / m_camera.orthographicSize;

?? ??? ?float max_x = earth_width / 2 - aspectRatio*m_camera.orthographicSize;
?? ??? ?float move_x = position.x * moveSpeed/bs;
?? ??? ?float newx = m_camera.transform.position.x - move_x;
?? ??? ?if (newx >= -max_x && newx <= max_x)
?? ??? ?{
?? ??? ??? ?m_camera.transform.Translate(Vector3.right * -move_x, transform);
?? ??? ?}

?? ??? ?float max_y = earth_height / 2 - m_camera.orthographicSize;
?? ??? ?float move_y = position.y * moveSpeed/bs;
?? ??? ?float newy = m_camera.transform.position.y - move_y;
?? ??? ?if (newy >= -max_y && newy <= max_y)
?? ??? ?{
?? ??? ??? ?m_camera.transform.Translate(Vector3.up * -move_y, transform);
?? ??? ?}
?? ?}
?? ?/// <summary>
?? ?/// 放大縮小【相機】
?? ?/// </summary>
?? ?/// <param name="zoom"></param>
?? ?void ZoomInOut(float zoom)
?? ?{
?? ??? ?float old_level = m_camera.orthographicSize; //原級別
?? ??? ?if (zoom > camara_max) { zoom = camara_max; }
?? ??? ?if (zoom < camara_min) { zoom = camara_min; }
?? ??? ?m_camera.orthographicSize = zoom;

?? ??? ?Vector3 nowcamera = m_camera.transform.position;
?? ??? ?float max_x = earth_width / 2 - aspectRatio * m_camera.orthographicSize;
?? ??? ?float max_y = earth_height / 2 - m_camera.orthographicSize;
?? ??? ?if (nowcamera.x < -max_x) { nowcamera.x = -max_x; }
?? ??? ?if (nowcamera.x > max_x) { nowcamera.x = max_x; }
?? ??? ?if (nowcamera.y < -max_y) { nowcamera.y = -max_y; }
?? ??? ?if (nowcamera.y > max_y) { nowcamera.y = max_y; }
?? ??? ?m_camera.transform.position = nowcamera;
?? ?}
?? ?/// <summary>
?? ?/// 監測是否存在彈出窗體,如果存在就禁用地圖拖動和縮放功能
?? ?/// </summary>
?? ?/// <returns></returns>
?? ?bool ExistPopups()
? ? {
? ? ? ? bool ispopups = false;
?? ??? ?GameObject[] objs = GameObject.FindGameObjectsWithTag("Popups");
?? ??? ?for (var i = 0; i < objs.Length; i++)
?? ??? ?{
?? ??? ??? ?BasePanel panel = objs[i].GetComponent<BasePanel>();
?? ??? ??? ?if (panel.Isshow) { ispopups = true; break; }
?? ??? ?}
?? ??? ?return ispopups;
? ? }

}
?

好了,地圖的簡易顯示功能就這樣了,后面我會繼續更新~~~

PS:因為是新手的關系,所以代碼不是很完善,后面等功能完成,會和大家一起分享代碼的

總結

以上是生活随笔為你收集整理的Unity2D 简易2D地图 —— 地图的显示的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 四川黄色一级片 | 啪啪小视频网站 | 亚洲激情综合 | 风流少妇 | 波多野结衣办公室双飞 | 免费在线观看黄色av | 欧美少妇一级片 | 四虎精品视频 | 欧美一级在线免费观看 | 亚洲色图欧洲色图 | 大胸美女无遮挡 | 麻豆porn | 欧美极品一区二区三区 | 亚洲成人av片 | 国产又色又爽又黄又免费 | 色人阁五月天 | 国产又黄又猛的视频 | 成人国产在线观看 | 国产在线高清视频 | 久久亚洲高清 | 人体裸体bbbbb欣赏 | 在办公室被c到呻吟的动态图 | 一级做a爰片久久毛片 | 欧美xx孕妇 | 亚洲喷水 | 亚洲色图第一页 | 亚洲国产精品久 | 青青草手机在线 | 尤物精品 | 国产在线观看一区 | av激情久久 | 九九视频免费 | 风韵多水的老熟妇 | 免费一级片 | 91精品视频网 | 国产视频首页 | 色老头影视 | 伊人国产视频 | 日韩一区视频在线 | 天堂а√在线中文在线鲁大师 | 欧美99久久精品乱码影视 | 巨物撞击尤物少妇呻吟 | 久久精品在线 | 一区三区视频在线观看 | 色综合久久久久无码专区 | 久久综合一本 | 欧美天堂 | 拔擦8x成人一区二区三区 | 欧美亚洲在线播放 | 亚洲激情视频在线播放 | 婷婷色在线观看 | 国产日韩中文字幕 | 国产噜噜噜噜久久久久久久久 | 国产www视频 | 色肉色伦交av色肉色伦 | 最新中文字幕免费 | 成人网在线视频 | 国产成人精品一区二区三区在线 | 国产精品麻豆一区二区 | 闷骚老干部cao个爽 av九九九 | 国产一二三四在线 | 国产专区在线视频 | 色网站在线播放 | 日日射夜夜 | 成人高清免费 | 国产又粗又猛又黄又爽无遮挡 | 日本特黄一级片 | 91av一区| 欧美videossex另类 | 懂色av一区二区三区四区五区 | 日韩 国产 一区 | 日韩网红少妇无码视频香港 | 国产视频一区二区三区四区 | 欧美精品日韩 | 成人不卡在线 | 国产欧美日韩精品在线 | 国产精品亚洲五月天丁香 | av网址导航| 欧美一区二区三区四区五区 | 麻豆国产一区 | 韩日视频在线观看 | 3d动漫精品啪啪一区二区下载 | 99在线免费| 91网站免费 | 亚洲日日骚| 在线观看国产区 | 国产综合自拍 | 欧美一性一乱一交一视频 | 综合99| bl动漫在线观看 | 精品久久久亚洲 | 美女爱爱爱 | 扒开女人屁股进去 | 97人妻精品一区二区三区动漫 | 亚洲精品2 | 五月综合色婷婷 | 欧美精品在线观看视频 | 狠狠ri| av在线观看地址 |