美术可以告诉你比例尺,但我觉得更好的是,定2个基准点,根据基准点在实际场景中的坐标以及小地图里的相对坐标计算比例尺。有了比例尺,就能将场景中所有的物体坐标实时反馈到小地图上。
private void CalLittleMapScale() { float mapWidth = Mathf.Abs(m_TransMapBase1.localPosition.x - m_TransMapBase2.localPosition.x); m_fMapScale = mapWidth / Mathf.Abs(m_db.m_goMobaBase1.transform.position.x - m_db.m_goMobaBase2.transform.position.x); //需要美术保证宽高同比缩 m_vSceneCenter = (m_db.m_goMobaBase1.transform.position + m_db.m_goMobaBase2.transform.position) / 2.0f; }
private void WorldPositionToLittleMapPos(GameObject _mapPoint, Vector3 _worldPos) { Vector3 vPosFromWorldCenter = _worldPos - m_vSceneCenter; _mapPoint.transform.localPosition = new Vector3(vPosFromWorldCenter.x * m_fMapScale, vPosFromWorldCenter.z * m_fMapScaleZ, _mapPoint.transform.localPosition.z) + m_TransMapCenter.transform.localPosition; }要点:
2.根据比例尺计算实际物体位置在小地图上的坐标。注意用localPosition,建议用相对中心位置的偏移。
这里处理了小地图上物体位置的更新,还有玩家被杀害,防御建筑被摧毁等导致的显隐需求。需要建立小地图上的点和实际GameObject的映射关系,用事件委托的方式,在GameObject被摧毁时,通知小地图隐藏相应的点。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u010153703/article/details/46680941