NGUI小地图制作过程

http://game.ceeger.com/forum/read.php?tid=10766&fid=16#read_123739


小地图有很多方法,自己写了一个。(帖子里面发图好不方便,啥时候改进一下下呢) 


原理: 
       小地图的原理其实很简单就是算一个比例尺,类似于我们初中学的等比三角形的知识。 
       第一 ,首先在实际场景中确定一个起始点,我在这里是建立了一个空物体作为起始点,如下图: 
        
       
    第二,算比例。 
    实际场景中的人物距离起始点的距离比例(x,y的差值)(请注意我这里的坐标都是从左到右变大,从下到上值变大,界面也   是这样)  
       xdistance  = 人物.x - 起始点.x; 
       ydistance = 人物.z - 起始点.z; 
       
       然后用 xScale = xdistance /场景的长度;yScale = ydistance/场景的高度 
      (场景的长度也就是AB之间的距离,场景的高度也就是CD间的距离,如下图)   
      

这样我们就得到了一个比例尺了 
第三: 
      我们放2个NGUI的控件slideredsprite类型 
      如图: 
 



、 


arrow就是红色箭头,minimapBackground是背景,由于Ngui里面可能你加了缩放,和只适应的脚本,所以你要用这个箭头测一下你 的minimapBackground 的长宽,我是直接拖动arrow这个控件来看看背景的尺寸的大概是长170,宽20 
第四:换算 
代码我直接就贴上来了: 

  yScale = (player.transform.position.z - (-10))/20f; 
 xScale = (player.transform.position.x - (-89))/170f; 
 Vector3 vec = new Vector3(44+434*xScale,323+150*yScale,0f); 
 arrowTransform.localPosition = vec; 


44和323是小地图背景图最左下脚的坐标,我是以他为起始点,这是因为我要对于场景起始点 
这段代码放到update里面 
第五:保持箭头指向的是摄影机的方向(因为我的代码里面摄影机的方向和人物前进方向是一样的) 
 

注意:我这里人物的z轴指向和箭头y方向一致 
 arrowTransform.localEulerAngles = new Vector3(0,0,-mainCamera.transform.localEulerAngles.y); 
我这里有个负号是因为我的轴向是和摄影机方向相反 


最后我发一下完整代码: 

public class MiniMap : MonoBehaviour { 


 private GameObject player; 
 private float xScale; 
 private float yScale; 
 private Transform arrowTransform; 
 private GameObject mainCamera; 
 void Start () 
 { 
   player = GameObject.Find("Player"); 
   arrowTransform = GameObject.Find("UI/UICamera/Anchor/Panel/Arrow").GetComponent<Transform>(); 
   mainCamera = GameObject.Find("MainCamera"); 
 } 
  


 void Update () 
 { 
     
    yScale = (player.transform.position.z - (-10))/20f; 
    xScale = (player.transform.position.x - (-89))/170f; 
    Vector3 vec = new Vector3(44+434*xScale,323+150*yScale,0f); 
    arrowTransform.localPosition = vec; 


   arrowTransform.localEulerAngles = new Vector3(0,0,-mainCamera.transform.localEulerAngles.y); 
   
   
     
 } 





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值