首页 >Unity3D频道 >【UGUI研究院】 > UGUI研究院之游戏摇杆(二十一)
2016
03-18

UGUI研究院之游戏摇杆(二十一)

最近在做Unity基于UGUI的摇杆,发现了一种非常简单并且巧妙的方法,原文在这里, 不过要翻墙!!http://godstamps.blogspot.tw/2015/07/unity-ugui-scrollrect.html

它的原理就是利用ScrollRect来限制摇块的摇动区域,但是ScrollRect是矩形的,我们的摇杆的摇动区域应该是个圆形的才对。所以顺着这个思路我简单的改了改。

如下图所示, ScrollCircle就是摇杆的背景, 里面的Image就是摇块。

Snip20160318_1

 

代码

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class ScrollCircle :ScrollRect 
{
    protected float mRadius=0f;

    protected override void Start()
    {
        base.Start();
        //计算摇杆块的半径
        mRadius = (transform as RectTransform).sizeDelta.x * 0.5f;
    }

    public override void OnDrag (UnityEngine.EventSystems.PointerEventData eventData)
    {
        base.OnDrag (eventData);
        var contentPostion = this.content.anchoredPosition;
        if (contentPostion.magnitude > mRadius){
            contentPostion = contentPostion.normalized * mRadius ;
            SetContentAnchoredPosition(contentPostion);
        }
    }
}

Snip20160318_2

 

几行代码就出来了。然后就是摇杆的事件, 可以用UGUI的源生事件 IEndDragHandler , IBeginDragHandler

怎么样? 用UGUI做摇杆简单吧?

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

UGUI研究院之游戏摇杆(二十一)》有 17 条评论

  1. zgx说:

    那如果说我想先把它隐藏掉,点击哪个位置让他在哪出现,这样的话必须第二次点击才能触发OnDrag()方法,这个有什么解决办法呢?

  2. 一一一一说:

    你好,想请问一下,继承ScrollRect,然后在里面添加public的属性,却不会显示在检视面板上,想问下是怎么回事,以及应该如何解决。

  3. 远去之情说:

    Assets/ScrollCircle.cs(14,14): warning CS0114: `ScrollCircle.Start()’ hides inherited member `UnityEngine.EventSystems.UIBehaviour.Start()’. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword 导入这段代码,出现提示如上。该怎么做

  4. 远去之情说:

    这岂不是很好吗 用了。

  5. 这个以后可能用得到。。连插件都省了

  6. 元子说:

    矩形框怎么做处理呢? 发现左边和左下拉不到指定位置。被rect锁死了。

  7. 秦元培说:

    赞!简洁地出乎意料!

留下一个回复

你的email不会被公开。 必填项已用 * 标注。