Unity3d+moba+小地图
2016-05-04 03:42
459 查看
1 功能描述
玩家行走,在UI左上角显示小地图,显示玩家所在的位置,并且实时更新。网上一般方法是用一台空中camera作为小地图投影,但是这样要响应小地图上的icon点击事件比较麻烦,为止这里使用一种新方案。2 详细设计
第一个框中元素为UI小地图,主要为一张与地形长宽缩放比例的image。第二框中为放在地形正中央的GameObject,主要作用得到场景中Player坐标相对MiniMapObserver的坐标,再转为MimiMap的Bg的localPosition.如下图所示。
中间为摄像机俯视,黑cube为Player,MiniMapObserver放在地形的正中心。
2.1 MiniMap上创建icon
public void unitCreate(int id,Camp camp,UIType type) { GameObject obj = UIPoolMgr.self.getFromPool(type); obj.transform.SetParent(transform); var rect = obj.GetComponent<RectTransform>(); rect.localScale = new Vector3(1,1,1); m_mapObj[id] = obj; EventTriggerListener.Get(obj).onDown = (a) => { Debug.Log("MiniMap"+id); }; }
同时icon上绑定触摸响应,当点下时Debug.Log("MiniMap"+id);
2.2 更新icon位置
public void miniMapInit() { m_miniMap.unitCreate(1,Camp.We, UIType.Hero); StartCoroutine("yieldMiniMap"); }
当创建了icon后开启一个协程,每帧同步player的位置转为ui位置。
private IEnumerator yieldMiniMap() { while (true) { Vector3 posPlayer = m_miniMapObserver.transform.InverseTransformPoint(m_playerCtrl.transform.position); posPlayer *= m_miniMapScale; m_miniMap.unitUpdata(1,posPlayer); yield return null; } }
这里要注意转为相对坐标后,世界坐标的z轴=ui的y轴。m_miniMapScale为地形与Bg的缩放比。
public void unitUpdata(int id, Vector3 pos) { Vector3 newPos = Vector3.zero; newPos.x = pos.x; newPos.y = pos.z; newPos.z = 0; m_mapObj[id].transform.localPosition = newPos; }
相关文章推荐
- Unity3D UNET 模仿局域网游戏(一)
- WWW加载文件
- Unity3D游戏开发之虚拟现实项目开发流程
- Unity+Vuforia 防抖动解决方案
- 关于Unity任何版本点击Play运行就黑屏,除了摄像机窗口其他全部黑掉的问题解决~
- [UnityUI]NGUI性能优化之ScrollView
- 【笔记】Core GameObjects, components, and concepts relating to Unity UI development include
- untiy 3d ShaderLab_第6章_VertexLit渲染路径_3_顶点照明和Unity存放光源的第二种方式
- untiy 3d ShaderLab_第6章_VertexLit渲染路径_2_顶点照明和Unity存放光源的第一种方式
- Unity3D NGUI动态生成模糊背景图
- Unity5.2.3与android通讯
- Unity3D 之3D动画机设置
- Unity3d实现物体围绕某一点进行旋转
- Unity StrangeIoC HelloWorld
- Unity StrangeIoC HelloWorld
- 【Unity3D游戏开发】基于NGUI的表情图文混排解决方案 (二二)
- 【Unity3D游戏开发】定制新建C#文件的头描述
- 002-实现Unity3d中触摸屏幕控制物体的旋转和缩放 代码实现
- 猫都能学会的Unity3D Shader入门指南(二)
- unity3d 5.0中Renderer后面没有了material