美文网首页程序员技术栈
NGUI手游摇杆制作

NGUI手游摇杆制作

作者: Walk_In_Jar | 来源:发表于2019-10-24 17:55 被阅读0次

https://blog.csdn.net/snowdust/article/details/5895593

目的是在一个限定的区域内,触摸开始,就在这个位置使用转盘来控制人物的行走之类的,类似王者农药的转盘操作,手指之间不能影响。


image.png

开始制作:
首先需要ngui插件,自行搜索。
创建UIRoot,分辨率对齐1920*1080


image.png

然后创建一个空白的UI2D Sprite


image.png

区域是整个屏幕左下角的四分之一


image.png
其锚点设置如下,并添加Box Collider组件,与区域保持一致
image.png

放入摇杆素材,大小合适。


image.png
编写代码:
需要用到UIDragDropItem.cs脚本
新建一个脚本PanController.cs挂载到 PanArea 上,因为它是移动区域。
PanController继承UIDragDropItem,定义如下变量:
 public Transform pan, move;//摇杆背景与移动摇杆。
    //摇杆pan移动的最远距离
    public float range = 110;
    private Vector2 orgPos, startPos;//一些初始参数
    //输出参数
    public float  x,y;

重写start方法,让摇杆一开始的透明度低些,并记录此时摇杆pan物体的本地位置。

    protected override void Start()
    {
        base.Start();
        pan.GetComponent<UI2DSprite>().alpha = 0.6f;
        orgPos = pan.gameObject.transform.localPosition;
    }

重写OnPress方法,参数isPressed在按下时为true,松开为false,非常适合摇杆按下的初始化操作和释放操作。

    protected override void OnPress(bool isPressed)
    {
         base.OnPress(isPressed);
        if (isPressed)
        {
           if (UICamera.currentTouchID < 0)//鼠标也会触发,屏蔽鼠标的输入
            {
                return;
            }
//在按下时摇杆pan的透明度提升,并且记录按下时手指的位置startpos,并将其转化,与屏幕的一半相减,让摇杆pan的位置在这里
            pan.GetComponent<UI2DSprite>().alpha = 1f;
            startPos = Input.touches[UICamera.currentTouchID].position-new Vector2 (Screen.width,Screen.height)/2;
            pan.gameObject.transform.localPosition = startPos;
        }
        else
        {
//松开摇杆时,让pan透明度降低,并让里面的按钮回到原点,pan的位置回到没有按下的位置
            pan.GetComponent<UI2DSprite>().alpha = 0.6f;
            move.localPosition = Vector2.zero;
            pan.gameObject.transform.localPosition = orgPos;
        }
    }

那么在移动时,重写OnDrag方法

  protected override void OnDrag(Vector2 delta)
    {
        Vector2 pos= (Input.touches[UICamera.currentTouchID].position - new Vector2(Screen.width / 2, Screen.height / 2)-startPos);
        if (pos.magnitude >= range)
        {
            x = pos.normalized.x;
            y = pos.normalized.y;
            move.localPosition = pos.normalized * range;
        }
        else
        {
            x = pos.x / range;
            y = pos.y / range;
            move.localPosition = pos;
        }
        Debug.Log(x + " ," + y);
        //输出了x,与y  其满足x²+x²=1
    }

后面是一些文档
visual studio 2019下载慢的 将下面的添加到host,不确定安全性
110.53.72.104 download.visualstudio.microsoft.com

//判断是否存在光传感器来判断是否为模拟器

public bool GetIsSimulator()
    {
#if UNITY_ANDROID
        AndroidJavaObject sensorManager  = currentActivity.Call<AndroidJavaObject>("getSystemService", "sensor");
        AndroidJavaObject sensor  = sensorManager.Call<AndroidJavaObject>("getDefaultSensor",5);    //光传感器
        if(sensor == null){
            return true;
        }else{
            return false;
        }
# endif
        return false;
    }

相关文章

  • NGUI手游摇杆制作

    https://blog.csdn.net/snowdust/article/details/5895593 目的...

  • Unity-UGUI多点触控、多点滑动摇杆操作

    现在很多手游都是通过摇杆操作: 比如左手摇杆,右手点击按钮攻击的MMO系列; 或者是左右手都有类似摇杆拖动设计的按...

  • Unity 制作简易虚拟摇杆

    计算方法 制作摇杆有两个需要考虑的点: 摇杆跟随鼠标移动 松开鼠标后,摇杆位置归为初始位置。 摇杆的移动范围要在圆...

  • 《镇魔曲》手游体验报告

    基本信息 游戏名称:《镇魔曲》手游 游戏类型:MMORPG 游戏标签:MOBA“双摇杆”、角色扮演、副本、对战、社...

  • 体验创作游戏2

    《毒液·致命守护者》手游 《制作蛋糕》手游 全职高手《荣耀》网游

  • 自制简易版手游摇杆

    最近想着自己动手做款游戏,算是工作之余练练手,游戏规模不需要多大,毕竟个人时间有限,能简单实现我想要的功能就好。就...

  • NGUI制作背包

    下载素材图片素材链接:https://pan.baidu.com/s/1N8IFAYWtWu5fJC9jZTkRs...

  • (转)制作虚拟摇杆

    转自:http://blog.csdn.net/qinyuanpei/article/details/495100...

  • Unity3D--UGUI背包系统(一)

    与以前的ngui所比较的话,ugui感觉更为简单方便,同样也与ngui有很多相同的功能,这里我们先来初步制作ugu...

  • 如何在使用NUGI的时候减少DrawCall的产生(转)

    1、NGUI图集的使用。在使用NGUI制作界面时,图集的选用是一个关键,因为它直接关系到了drawcall的数量。...

网友评论

    本文标题:NGUI手游摇杆制作

    本文链接:https://www.haomeiwen.com/subject/ewpdvctx.html