Unity3D开发——安卓版的虚拟按键实现

//////////////////////////////2015/08/22////////////////////////

/////////////////////////////by  xbw//////////////////////////////

///////////////////////////环境   unity4.6.1//////////////////

这个呢,是我自己想要的,这个虚拟按键呢在网上找了好多插件,对于人家的游戏适应的表现能力很好。然而在自己的游戏中并不适应,更没法用,思来想去还是自己写吗,早就想到了GUI的Button,索性就实现一下吧,先看一下效果图,

这几个就是Button,我的游戏中的按钮控制角色的移动也比较奇怪,非正常的运动,PC的按键对于这个Button的转换并不容易,先来看看代码,左右以及下的脚本

if (Input.GetKeyDown("left"))
        {
            if(lu==2)
            {
                transform.Translate(Vector3.left * 18.0f);
                lu = 1;
            }
            if(lu==3)
            {
                transform.Translate(Vector3.left * 18.0f);
                lu = 2;
            }
        }
        if (Input.GetKeyDown("right"))
        {
            if(lu==2)
            {
                transform.Translate(Vector3.right * 18.0f);
                lu = 3;
            }
            if(lu==1)
            {
                transform.Translate(Vector3.right * 18.0f);
                lu = 2;
            }           
        }

这是键盘控制的左右,我的想法变成button的,这样呢,一开始我是直接把要实现的代码放在了GUI中,后来不管怎么点角色都不会移动,通过查找资料,发现这个程序的执行是有顺序的,UpDate跟OnGUI差的不是一点半点,先直线UpDate,并且还了解到,UpDate是每一帧都会执行,而OnGUI是没几帧执行,这是unity官方的解释,这样的话,把角色移动写在OnGUI中,就不会每一帧都渲染啦,角色就没有反应了,所以,我把那些程序做了个开关,用开关控制在UpDate中执行,这样立马爽了,看一下代码

 if (GUI.Button(new Rect(0, Screen.height * 0.72f, Screen.width * 0.13f, Screen.height * 0.13f), "左"))
        {
            open = true;
        }
        else
        {
            
        }
        GUI.DrawTexture(new Rect(0, Screen.height * 0.72f, Screen.width * 0.13f, Screen.height * 0.13f), zuo1);
        GUI.DrawTexture(new Rect(0, Screen.height * 0.72f, Screen.width * 0.13f, Screen.height * 0.13f), zuo2);

        if (GUI.Button(new Rect(0, Screen.height * 0.87f, Screen.width * 0.13f, Screen.height * 0.13f), "右"))
        {
            open2 = true;
        }
        else
        {
            //open2 = false;
        }
        GUI.DrawTexture(new Rect(0, Screen.height * 0.87f, Screen.width * 0.13f, Screen.height * 0.13f), you1);
        GUI.DrawTexture(new Rect(0, Screen.height * 0.87f, Screen.width * 0.13f, Screen.height * 0.13f), you2);


        if (GUI.RepeatButton(new Rect(Screen.width * 0.92f, Screen.height*0.78f, Screen.height * 0.1f, Screen.height * 0.1f), ""))
        {
            open3 = true;
            open4 = true;
        }
        else
        {
            open3 = false;
        }
        GUI.DrawTexture(new Rect(Screen.width * 0.9f, Screen.height*0.75f, Screen.width * 0.1f, Screen.width * 0.1f), xia);
        GUI.DrawTexture(new Rect(Screen.width * 0.9f, Screen.height*0.75f, Screen.width * 0.1f, Screen.width * 0.1f), xia1);
至于那个注释掉的以及空着的else中的语句在手机上运行是有问题的,之前在电脑上调试一点问题都没有,鼠标点击button角色是能左右的,然而在手机上,却没有效果,后来又想到了几帧执行一次,这样的话我们不能再else中关闭开关,我们要在角色移动后在UpDate中关闭开关,这样就好了,至于这个下,我们的角色会下滑,并且是持续的,这样我们用到了RepeatButton,这个按钮有着持续的功能,这样只要一直按着就会一直下滑,至于那个上,同理,这个没什么,都一样的,好了;;;;希望大家互相学习交流,有错误或者无法显现请留言,我会一一回复的,晚安啦baby们


你可能感兴趣的:(unity3D)