Unity3D自带的UI库,说实话,又丑又难用。。还没编辑器。

前面也查找过一些UI的编辑器了,但感觉效果依然不是很好。

于是想到要用面片来做UI,这样就可以更自由的定制自己的UI界面,同时也可以用Unity的编辑器。

 

如果只是单纯的在摄像机上放上一堆面片,那自然很简单,但如果想要放上一个背景图片呢?

用GUI的DrawTexture可以制作全屏的背景图,但是他会遮盖场景中的物体,那些自己定义的面片就看不见了。

有人可能会说用一个大的板子放后面,这也是一种解决方法,但是当屏幕大小变化时,除非你去用代码调整,不然就会出现问题。

 

比较好的解决方式就是加一个新的Camera来做。

这边一个操作步骤,懒的翻译,自己看吧,想用好Unity,会基本的英文搜索是很最要的。。(国内基本找不到资料)

http://answers.unity3d.com/questions/9729/how-can-i-display-a-flat-background-2d-image-not-a.html

再给一个在2DUI上放3D物体的教程,原理基本是一样的。

http://www.41post.com/3255/programming/unity3d-creating-a-gui-with-both-3d-and-2d-elements

下面是结果的一个GIF:

左下角的那个小立方体就是一个跟场景中一样的3D立方体。

 

现在要加上选中的事件,将Android上的Touch的坐标转换到3D场景中,然后来判断是否选中了我们的面片。

这里我们用Physx的射线可以很容易的实现。

放上C#的代码:

// Update is called once per frame
void Update ()
{
if (Input.touchCount > 0)
{
if (Input.GetTouch(0).phase == TouchPhase.Began)
{

}
else if (Input.GetTouch(0).phase == TouchPhase.Ended)
{
RaycastHit hit;

Ray ray = camera.ScreenPointToRay(Input.GetTouch(0).position);

if (Physics.Raycast(ray,out hit))
{
Debug.Log("hit:"+hit.transform.gameObject.name);
                }
}
}
}



全屏背景:

http://www.cocoachina.com/gamedev/gameengine/2011/0526/2890.html