最近在做Unity基于UGUI的摇杆,发现了一种非常简单并且巧妙的方法,原文在这里, 不过要翻墙!!http://godstamps.blogspot.tw/2015/07/unity-ugui-scrollrect.html
它的原理就是利用ScrollRect来限制摇块的摇动区域,但是ScrollRect是矩形的,我们的摇杆的摇动区域应该是个圆形的才对。所以顺着这个思路我简单的改了改。
如下图所示, ScrollCircle就是摇杆的背景, 里面的Image就是摇块。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
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); } } } |
几行代码就出来了。然后就是摇杆的事件, 可以用UGUI的源生事件 IEndDragHandler , IBeginDragHandler
怎么样? 用UGUI做摇杆简单吧?
- 本文固定链接: https://www.xuanyusong.com/archives/3924
- 转载请注明: 雨松MOMO 于 雨松MOMO程序研究院 发表
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!
那如果说我想先把它隐藏掉,点击哪个位置让他在哪出现,这样的话必须第二次点击才能触发OnDrag()方法,这个有什么解决办法呢?
把gameobject隐藏了就不会收到ondrag事件了。
你好,想请问一下,继承ScrollRect,然后在里面添加public的属性,却不会显示在检视面板上,想问下是怎么回事,以及应该如何解决。
UGUI都是这样的, 继续继承Editor 重写。
这个摇杆怎么搞状态机切后就是像Easy touch一样怎么搞,分别有三个事件按下 移动中 结束这三个事件
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 导入这段代码,出现提示如上。该怎么做虽然不知道为什么。大概是没有继承MonoBehaviour。可以写在OnDrag 里
protected override void Start() { base.Start(); mRadius = (transform as RectTransform).sizeDelta.x * 0.5f; }这样写就可以了。
这岂不是很好吗 用了。
这个以后可能用得到。。连插件都省了
嗯,还可以这个。。
牛
矩形框怎么做处理呢? 发现左边和左下拉不到指定位置。被rect锁死了。
我也是,请问你解决了么
666666666666666
赞!简洁地出乎意料!
很棒!