【转】ugui自制摇杆
http://www.cnblogs.com/duyushuang/p/4457691.html
珍爱生命,远离插件。
以上8个字,好好理解。
反正我是这么觉得。
我说的是unity,不是魔兽世界。
总有一天,我会一句一句写出属于自己的东西。
可以开始主题了。
如图所示,建立一个画布,添加两个image即可(注意父子关系,父亲为摇杆外面的那个圆圈),然后调整位置到左下角,调节锚点,选左下角那个。
接下来编辑脚本
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class Joystick : MonoBehaviour, IBeginDragHandler, IDragHandler ,IEndDragHandler{
public Vector3 normalCenter;
public static float joystickH;
public static float joystickV;
private bool isDrag;
private Vector3 startPos;
private Vector3 dragPos;
void Awake()
{
isDrag = false;
startPos = transform.localPosition;
}
void Update()
{
if(isDrag)
{
float distance = Vector3.Distance(dragPos, normalCenter);
Vector3 dirNormal = dragPos - normalCenter;
if(distance > 45)
{
transform.localPosition = dirNormal.normalized * 50;
}
else
{
transform.localPosition = dirNormal;
}
joystickH = dirNormal.x / 1000;
joystickV = dirNormal.y / 1000;
}
else
{
transform.localPosition = startPos;
joystickH = 0;
joystickV = 0;
}
}
public void OnBeginDrag(PointerEventData eventData)
{
isDrag = true;
}
public void OnDrag(PointerEventData eventData)
{
dragPos = eventData.position;
}
public void OnEndDrag(PointerEventData eventData)
{
isDrag = false;
}
}
OK,回到unity运行程序,是不是可以动了呢。
让别的物体动的话,只需在控制移动的脚本里调用 joystickH joystickV 即可,对应水平和垂直方向。
最新文章
- What is SPI?
- skynet的协程
- http压力测试
- hunnu 小明的烦恼——找字符串
- PC和单片机通过MODBUS RTU通信
- Centos6.8下安装oracle_11gr2版主要过程
- [bzoj4866] [Ynoi2017]由乃的商场之旅
- 解决在C#(.net)按字节数截取字符串最后出现乱码的问题
- TZOJ 2392 Bounding box(正n边形三点求最小矩形覆盖面积)
- NVM 安装 nodejs
- Caffe和py-faster-rcnn日常使用备忘录
- 记Asp.Net Core Swagger 使用 并带域接口处理
- 无效GRANT语句导致主从同步断开
- ubuntu16.04安装tensorflow-gpu和cuda8.0加速训练
- 操作系统Day1地址空间与地址生成
- 【云计算】使用nsenter进入Docker容器进行调试
- java.net.MalformedURLException: Protocol not found:
- 怎样使用libcurl获取隐藏了文件后缀的url网络文件类型
- POJ - 2187:Beauty Contest (最简单的旋转卡壳,求最远距离)
- 使用nginx搭建https服务器(转)