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们


  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值