你可能会问为什么unity EasyTouch 插件, 还要自己做。是因为这个插件太大了 有17M (在不删除自己用东西的情况下,打包也会将没有使用的过滤掉)
还很好做~ 所以就将这个放进来 ,这个只是一个简单的摇杆实现,仅此而已,不过具体的开发就要字迹继续去写相关的代码了!
废话不多说直接上教程
首先需要建立一个Image 然后你可以吧他放下左下角。再往这个Image(起名叫jointed)添加一个组件 叫做 EventTrigger的组件 ,然后再往这个Image下面添加上一个Image(起名叫Dian) 作为小拨杆。然后建立一个脚本 名字叫 GameTouchEvent
然后下面是代码
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class GameTouchEvent :EventTrigger
{
//就是小拨杆 我叫它Dian
GameObject Dian;
//小拨杆的初始位置
Vector3 Dian_position;
//定义最外层的jointed半径
float R=175.0f;
void Start(){
//取到小波杆
Dian = this.transform.GetChild (0).gameObject;
//取到图片的宽 然后算出半径
R = this.GetComponent<RectTransform> ().sizeDelta.x/2;
Debug.Log ("摇杆按钮的半径=" + R);
//将遥感的中心点的坐标按照本摇杆范围进行重置坐标 将坐标取到 用于回放中心点的坐标
// Dian.transform.position = new Vector3 ( R, R, this.transform.position.z);
Dian_position = Dian.transform.position;
}
//开始在屏幕上滑动
public override void OnDrag(PointerEventData data)
{
Debug.Log("拖拽开始"+data.position+"当前的中心坐标是="+this.transform.position+"两点之间的距离差值="+Vector3.Distance(this.transform.position,data.position));
//如果鼠标到虚拟键盘原点的位置 < 半径r
if (Vector3.Distance (data.position, this.transform.position) <= R) {
//虚拟键跟随鼠标
Dian.transform.position = data.position;
} else {
//计算出当前鼠标和Dian原点之间的向量
Vector3 dir = new Vector3(data.position.x,data.position.y,Dian_position.z) - Dian_position;
//这里dir.normalized是向量归一化的意思,也就是给出一个从开始Dian_position 到data.position位置的方向。这个时候我们知道了方向也就可以算出来小波杆在上面位置
Dian.transform.position = Dian_position + dir.normalized * R;
}
}
//这个事件停止在屏幕上滑动
public override void OnEndDrag(PointerEventData data)
{
Debug.Log("拖拽结束"+data.pressPosition);
Dian.transform.position = Dian_position;
}
//下面的这些事件都可以使用哦~ 如果你想做出更多不同或者更细致的东西
public override void OnBeginDrag(PointerEventData data)
{
Debug.Log("OnBeginDrag called.");
}
public override void OnDrop(PointerEventData data)
{
Debug.Log("OnDrop called.");
}
public override void OnCancel(BaseEventData data)
{
Debug.Log("OnCancel called.");
}
public override void OnDeselect(BaseEventData data)
{
Debug.Log("OnDeselect called.");
}
public override void OnInitializePotentialDrag(PointerEventData data)
{
Debug.Log("OnInitializePotentialDrag called.");
}
public override void OnMove(AxisEventData data)
{
Debug.Log("OnMove called.");
}
public override void OnPointerClick(PointerEventData data)
{
Debug.Log("OnPointerClick called.");
}
public override void OnPointerDown(PointerEventData data)
{
Debug.Log("OnPointerDown called.");
}
public override void OnPointerEnter(PointerEventData data)
{
Debug.Log("OnPointerEnter called.");
}
public override void OnPointerExit(PointerEventData data)
{
Debug.Log("OnPointerExit called.");
}
public override void OnPointerUp(PointerEventData data)
{
Debug.Log("OnPointerUp called.");
}
public override void OnScroll(PointerEventData data)
{
Debug.Log("OnScroll called.");
}
public override void OnSelect(BaseEventData data)
{
Debug.Log("OnSelect called.");
}
public override void OnSubmit(BaseEventData data)
{
Debug.Log("OnSubmit called.");
}
public override void OnUpdateSelected(BaseEventData data)
{
Debug.Log("OnUpdateSelected called.");
}
}
希望可以帮助你~