您的位置:首页 > 产品设计 > UI/UE

NGUI小地图制作过程

2014-02-09 00:50 232 查看
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);

}

}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: