unity中自己做一个滑动摇杆

你可能会问为什么unity  EasyTouch 插件, 还要自己做。是因为这个插件太大了 有17M (在不删除自己用东西的情况下,打包也会将没有使用的过滤掉)

还很好做~  所以就将这个放进来 ,这个只是一个简单的摇杆实现,仅此而已,不过具体的开发就要字迹继续去写相关的代码了!

废话不多说直接上教程

首先需要建立一个Image 然后你可以吧他放下左下角。再往这个Image(起名叫jointed)添加一个组件 叫做 EventTrigger的组件 ,然后再往这个Image下面添加上一个Image(起名叫Dian) 作为小拨杆。然后建立一个脚本 名字叫 GameTouchEvent

unity中自己做一个滑动摇杆_第1张图片

 

然后下面是代码

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 ().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.");
	}
}

希望可以帮助你~

 

你可能感兴趣的:(unity)