#if UNITY_ANDROID && !UNITY_EDITOR
#define ANDROID
#endif
#if UNITY_IPHONE && !UNITY_EDITOR
#define IPHONE
#endif
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace CombatGesture {
public class TouchPanel : MonoBehaviour{
public float xOffset = 1;
public float yOffset = 1;
public float changeOffset = 10;
public GameObject targetObj = null;
protected TouchEvent touchEvent;
private bool mBoolLeft = false;
private bool mBoolRight = false;
bool oneBool;
private Vector2 mFirstPos = Vector2.zero;//第一次
private Vector2 mSecondPos = Vector2.zero;//第二次
private Vector2 mOldPosition1 = new Vector2(0, 0);
private Vector2 mOldPosition2 = new Vector2(0, 0);
private float mOldDistance = 0f;
private float mNewDistance = 0f;
public Text text;
public Text text2;
public Text text3;
public Text text4;
private bool mBoolEnlage = false;
private bool mBoolDiminish = false;
private Vector2 tempPosition1;
private Vector2 tempPosition2;
void Start() {
touchEvent = new TouchEvent();
}
void Update()
{
//#if IPHONE || ANDROID
if (Input.touchCount == 1)
{
if (Input.GetTouch(0).phase == TouchPhase.Began)
{
if (Input.GetTouch(0).phase == TouchPhase.Stationary)
{
Ray ray = Camera.main.ScreenPointToRay(new Vector3(Input.GetTouch(0).position.x, Input.GetTouch(0).position.y, 0));
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
RayCast(hit);
}
else
{
touchEvent.OnPress();
}
}
}
}
else
{
}
//2016年12月2日 by qc
text4.text = Input.touches.Length.ToString();
if (Input.touchCount < 1)
{
oneBool = true;
}
OneFingerTouch();
MoreFingerTouch();
//#else
// if (Input.GetMouseButtonDown(0)) {
// Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
// RaycastHit hit;
// if (Physics.Raycast(ray, out hit)) {
// RayCast(hit);
// }else {
// touchEvent.OnPress();
// }
//}
//鼠标 左右滑动 2016年12月1日 by qc
//if (Input.GetMouseButtonDown(0))
//{
// mFirstPos = Input.mousePosition;
// mBoolLeft = true;
//}
//if (Input.GetMouseButtonUp(0))
//{
// mSecondPos = Input.mousePosition;
// mBoolRight = true;
//}
//if (mBoolLeft && mBoolRight)
//{
// if (mSecondPos.x < mFirstPos.x)
// touchEvent.OnLeftTouch(mSecondPos.x - mFirstPos.x);
// if (mSecondPos.x > mFirstPos.x)
// touchEvent.OnRightTouch(mSecondPos.x - mFirstPos.x);
// if (mSecondPos.y > mFirstPos.y)
// touchEvent.OnUpTouch(mSecondPos.y - mFirstPos.y);
// if (mSecondPos.y < mFirstPos.y)
// touchEvent.OnDownTouch(mSecondPos.y - mFirstPos.y);
// mBoolLeft = false;
// mBoolRight = false;
//}
// #endif
}
private void RayCast(RaycastHit hit) {
if (!EventSystem.current.IsPointerOverGameObject()) {
touchEvent.OnPress(hit.collider.transform.root.gameObject);
}
}
void OneFingerTouch()
{
if (1 == Input.touchCount && oneBool)
{
//if (Input.GetTouch(0).phase == TouchPhase.Moved)
//{
//if (Input.GetTouch(0).phase == TouchPhase.Moved)
//{
// if (Input.GetTouch(0).deltaPosition.x > 20f)
// text.text = "我右侧滑动了";
// else if (Input.GetTouch(0).deltaPosition.x < -20f)
// text.text = "我左侧滑动了";
//}
if (Input.GetTouch(0).phase == TouchPhase.Began)
{
mFirstPos = Input.GetTouch(0).position;
mSecondPos = Input.GetTouch(0).position;
mBoolLeft = true;
}
if (Input.GetTouch(0).phase == TouchPhase.Ended)
{
mBoolRight = true;
}
mSecondPos = Input.GetTouch(0).position;
if (mBoolLeft && mBoolRight)
{
float xMoveDistance = Mathf.Abs(mSecondPos.x - mFirstPos.x);
float yMoveDistance = Mathf.Abs(mSecondPos.y - mFirstPos.y);
if (xMoveDistance > yMoveDistance)
{
if (mSecondPos.x - mFirstPos.x < -xOffset)
{
text.text = "我左侧滑动了" + (mSecondPos.x - mFirstPos.x).ToString();
// touchEvent.OnLeftTouch(mSecondPos.x - mFirstPos.x);
}
else if (mSecondPos.x - mFirstPos.x > xOffset)
{
text.text = "我右侧滑动了" + (mSecondPos.x - mFirstPos.x).ToString();
// touchEvent.OnRightTouch(mSecondPos.x - mFirstPos.x);
}
}
else
{
if (mSecondPos.y - mFirstPos.y < -yOffset)
{
text3.text = "我下滑动了" + (mSecondPos.y - mFirstPos.y).ToString();
touchEvent.OnDownTouch(mSecondPos.y - mFirstPos.y);
}
else if (mSecondPos.y - mFirstPos.y > yOffset)
{
text3.text = "我上滑动了" + (mSecondPos.y - mFirstPos.y).ToString();
touchEvent.OnUpTouch(mSecondPos.y - mFirstPos.y);
}
}
}
}
/* #region 2、实时变化
*
* if (Input.GetTouch(0).phase == TouchPhase.Began)
{
mFirstPos = Input.GetTouch(0).position;
mSecondPos = Input.GetTouch(0).position;
mBoolLeft = true;
}
if (Input.GetTouch(0).phase == TouchPhase.Ended)
{
mBoolRight = true;
mFirstPos = Input.GetTouch(0).position;
mSecondPos = Input.GetTouch(0).position;
}
if (Input.GetTouch(0).phase == TouchPhase.Moved)
{
mSecondPos = Input.GetTouch(0).position;
float xMoveDistance = Mathf.Abs(mSecondPos.x - mFirstPos.x);
float yMoveDistance = Mathf.Abs(mSecondPos.y - mFirstPos.y);
if (xMoveDistance > yMoveDistance)
{
if (mSecondPos.x - mFirstPos.x < -xOffset)
{
text.text = "我左侧滑动了" + (mSecondPos.x - mFirstPos.x).ToString();
// touchEvent.OnLeftTouch(mSecondPos.x - mFirstPos.x);
}
else if (mSecondPos.x - mFirstPos.x > xOffset)
{
text.text = "我右侧滑动了" + (mSecondPos.x - mFirstPos.x).ToString();
// touchEvent.OnRightTouch(mSecondPos.x - mFirstPos.x);
}
}
else
{
if (mSecondPos.y - mFirstPos.y < -yOffset)
{
text3.text = "我下滑动了" + (mSecondPos.y - mFirstPos.y).ToString();
// touchEvent.OnDownTouch(mSecondPos.y - mFirstPos.y);
}
else if (mSecondPos.y - mFirstPos.y > yOffset)
{
text3.text = "我上滑动了" + (mSecondPos.y - mFirstPos.y).ToString();
//touchEvent.OnUpTouch(mSecondPos.y - mFirstPos.y);
}
}
mFirstPos = mSecondPos;
}
}
* #endregion */
}
void MoreFingerTouch()
{
if (Input.touchCount > 1)
{
// 用手指按下 手指抬起 判断
// // if(Input.GetTouch(0).phase == TouchPhase.Moved && Input.GetTouch(1).phase == TouchPhase.Moved)
// //{
// if (Input.GetTouch(0).phase == TouchPhase.Began || Input.GetTouch(1).phase == TouchPhase.Began)
// {
// mOldPosition1 = Input.GetTouch(0).position;
// mOldPosition2 = Input.GetTouch(1).position;
// mBoolEnlage = true;
// }
// if (Input.GetTouch(0).phase == TouchPhase.Ended || Input.GetTouch(1).phase == TouchPhase.Ended)
// {
// mBoolDiminish = true;
// }
// tempPosition1 = Input.GetTouch(0).position;
// tempPosition2 = Input.GetTouch(1).position;
// if (mBoolEnlage && mBoolDiminish)
// {
// float leng1 = Mathf.Sqrt((mOldPosition1.x - mOldPosition2.x) * (mOldPosition1.x - mOldPosition2.x) + (mOldPosition1.y - mOldPosition2.y) * (mOldPosition1.y - mOldPosition2.y));
// float leng2 = Mathf.Sqrt((tempPosition1.x - tempPosition2.x) * (tempPosition1.x - tempPosition2.x) + (tempPosition1.y - tempPosition2.y) * (tempPosition1.y - tempPosition2.y));
// if (leng1 - leng2 < -changeOffset)
// {
// // 放大手势
// text2.text = "我放大了";
// touchEvent.OnEnlargeTouch(leng1 - leng2);
// mBoolEnlage = false;
// mBoolDiminish = false;
// }
// else if (leng1 - leng2 > changeOffset)
// {
// // 缩小手势
// text2.text = "我缩小了";
// touchEvent.OnDiminishTouch(leng1 - leng2);
// mBoolEnlage = false;
// mBoolDiminish = false;
// }
// }
//实时变大变小
if (Input.GetTouch(0).phase == TouchPhase.Began || Input.GetTouch(1).phase == TouchPhase.Began)
{
mOldPosition1 = Input.GetTouch(0).position;
mOldPosition2 = Input.GetTouch(1).position;
}
if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)
{
Vector2 tempPosition1 = Input.GetTouch(0).position;
Vector2 tempPosition2 = Input.GetTouch(1).position;
float leng1 = Mathf.Sqrt((mOldPosition1.x - mOldPosition2.x) * (mOldPosition1.x - mOldPosition2.x) + (mOldPosition1.y - mOldPosition2.y) * (mOldPosition1.y - mOldPosition2.y));
float leng2 = Mathf.Sqrt((tempPosition1.x - tempPosition2.x) * (tempPosition1.x - tempPosition2.x) + (tempPosition1.y - tempPosition2.y) * (tempPosition1.y - tempPosition2.y));
if (leng1 - leng2 < -changeOffset)
{
// 放大手势
text2.text = "我放大了";
targetObj.transform.localScale += targetObj.transform.localScale * Time.deltaTime;
}
else if (leng1 - leng2 > changeOffset)
{
// 缩小手势
text2.text = "我缩小了";
targetObj.transform.localScale -= targetObj.transform.localScale * Time.deltaTime;
//targetObj.transform.localScale
}
mOldPosition1 = tempPosition1;
mOldPosition2 = tempPosition2;
}
oneBool = false;
}
}
}
}
#define ANDROID
#endif
#if UNITY_IPHONE && !UNITY_EDITOR
#define IPHONE
#endif
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace CombatGesture {
public class TouchPanel : MonoBehaviour{
public float xOffset = 1;
public float yOffset = 1;
public float changeOffset = 10;
public GameObject targetObj = null;
protected TouchEvent touchEvent;
private bool mBoolLeft = false;
private bool mBoolRight = false;
bool oneBool;
private Vector2 mFirstPos = Vector2.zero;//第一次
private Vector2 mSecondPos = Vector2.zero;//第二次
private Vector2 mOldPosition1 = new Vector2(0, 0);
private Vector2 mOldPosition2 = new Vector2(0, 0);
private float mOldDistance = 0f;
private float mNewDistance = 0f;
public Text text;
public Text text2;
public Text text3;
public Text text4;
private bool mBoolEnlage = false;
private bool mBoolDiminish = false;
private Vector2 tempPosition1;
private Vector2 tempPosition2;
void Start() {
touchEvent = new TouchEvent();
}
void Update()
{
//#if IPHONE || ANDROID
if (Input.touchCount == 1)
{
if (Input.GetTouch(0).phase == TouchPhase.Began)
{
if (Input.GetTouch(0).phase == TouchPhase.Stationary)
{
Ray ray = Camera.main.ScreenPointToRay(new Vector3(Input.GetTouch(0).position.x, Input.GetTouch(0).position.y, 0));
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
RayCast(hit);
}
else
{
touchEvent.OnPress();
}
}
}
}
else
{
}
//2016年12月2日 by qc
text4.text = Input.touches.Length.ToString();
if (Input.touchCount < 1)
{
oneBool = true;
}
OneFingerTouch();
MoreFingerTouch();
//#else
// if (Input.GetMouseButtonDown(0)) {
// Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
// RaycastHit hit;
// if (Physics.Raycast(ray, out hit)) {
// RayCast(hit);
// }else {
// touchEvent.OnPress();
// }
//}
//鼠标 左右滑动 2016年12月1日 by qc
//if (Input.GetMouseButtonDown(0))
//{
// mFirstPos = Input.mousePosition;
// mBoolLeft = true;
//}
//if (Input.GetMouseButtonUp(0))
//{
// mSecondPos = Input.mousePosition;
// mBoolRight = true;
//}
//if (mBoolLeft && mBoolRight)
//{
// if (mSecondPos.x < mFirstPos.x)
// touchEvent.OnLeftTouch(mSecondPos.x - mFirstPos.x);
// if (mSecondPos.x > mFirstPos.x)
// touchEvent.OnRightTouch(mSecondPos.x - mFirstPos.x);
// if (mSecondPos.y > mFirstPos.y)
// touchEvent.OnUpTouch(mSecondPos.y - mFirstPos.y);
// if (mSecondPos.y < mFirstPos.y)
// touchEvent.OnDownTouch(mSecondPos.y - mFirstPos.y);
// mBoolLeft = false;
// mBoolRight = false;
//}
// #endif
}
private void RayCast(RaycastHit hit) {
if (!EventSystem.current.IsPointerOverGameObject()) {
touchEvent.OnPress(hit.collider.transform.root.gameObject);
}
}
void OneFingerTouch()
{
if (1 == Input.touchCount && oneBool)
{
//if (Input.GetTouch(0).phase == TouchPhase.Moved)
//{
//if (Input.GetTouch(0).phase == TouchPhase.Moved)
//{
// if (Input.GetTouch(0).deltaPosition.x > 20f)
// text.text = "我右侧滑动了";
// else if (Input.GetTouch(0).deltaPosition.x < -20f)
// text.text = "我左侧滑动了";
//}
if (Input.GetTouch(0).phase == TouchPhase.Began)
{
mFirstPos = Input.GetTouch(0).position;
mSecondPos = Input.GetTouch(0).position;
mBoolLeft = true;
}
if (Input.GetTouch(0).phase == TouchPhase.Ended)
{
mBoolRight = true;
}
mSecondPos = Input.GetTouch(0).position;
if (mBoolLeft && mBoolRight)
{
float xMoveDistance = Mathf.Abs(mSecondPos.x - mFirstPos.x);
float yMoveDistance = Mathf.Abs(mSecondPos.y - mFirstPos.y);
if (xMoveDistance > yMoveDistance)
{
if (mSecondPos.x - mFirstPos.x < -xOffset)
{
text.text = "我左侧滑动了" + (mSecondPos.x - mFirstPos.x).ToString();
// touchEvent.OnLeftTouch(mSecondPos.x - mFirstPos.x);
}
else if (mSecondPos.x - mFirstPos.x > xOffset)
{
text.text = "我右侧滑动了" + (mSecondPos.x - mFirstPos.x).ToString();
// touchEvent.OnRightTouch(mSecondPos.x - mFirstPos.x);
}
}
else
{
if (mSecondPos.y - mFirstPos.y < -yOffset)
{
text3.text = "我下滑动了" + (mSecondPos.y - mFirstPos.y).ToString();
touchEvent.OnDownTouch(mSecondPos.y - mFirstPos.y);
}
else if (mSecondPos.y - mFirstPos.y > yOffset)
{
text3.text = "我上滑动了" + (mSecondPos.y - mFirstPos.y).ToString();
touchEvent.OnUpTouch(mSecondPos.y - mFirstPos.y);
}
}
}
}
/* #region 2、实时变化
*
* if (Input.GetTouch(0).phase == TouchPhase.Began)
{
mFirstPos = Input.GetTouch(0).position;
mSecondPos = Input.GetTouch(0).position;
mBoolLeft = true;
}
if (Input.GetTouch(0).phase == TouchPhase.Ended)
{
mBoolRight = true;
mFirstPos = Input.GetTouch(0).position;
mSecondPos = Input.GetTouch(0).position;
}
if (Input.GetTouch(0).phase == TouchPhase.Moved)
{
mSecondPos = Input.GetTouch(0).position;
float xMoveDistance = Mathf.Abs(mSecondPos.x - mFirstPos.x);
float yMoveDistance = Mathf.Abs(mSecondPos.y - mFirstPos.y);
if (xMoveDistance > yMoveDistance)
{
if (mSecondPos.x - mFirstPos.x < -xOffset)
{
text.text = "我左侧滑动了" + (mSecondPos.x - mFirstPos.x).ToString();
// touchEvent.OnLeftTouch(mSecondPos.x - mFirstPos.x);
}
else if (mSecondPos.x - mFirstPos.x > xOffset)
{
text.text = "我右侧滑动了" + (mSecondPos.x - mFirstPos.x).ToString();
// touchEvent.OnRightTouch(mSecondPos.x - mFirstPos.x);
}
}
else
{
if (mSecondPos.y - mFirstPos.y < -yOffset)
{
text3.text = "我下滑动了" + (mSecondPos.y - mFirstPos.y).ToString();
// touchEvent.OnDownTouch(mSecondPos.y - mFirstPos.y);
}
else if (mSecondPos.y - mFirstPos.y > yOffset)
{
text3.text = "我上滑动了" + (mSecondPos.y - mFirstPos.y).ToString();
//touchEvent.OnUpTouch(mSecondPos.y - mFirstPos.y);
}
}
mFirstPos = mSecondPos;
}
}
* #endregion */
}
void MoreFingerTouch()
{
if (Input.touchCount > 1)
{
// 用手指按下 手指抬起 判断
// // if(Input.GetTouch(0).phase == TouchPhase.Moved && Input.GetTouch(1).phase == TouchPhase.Moved)
// //{
// if (Input.GetTouch(0).phase == TouchPhase.Began || Input.GetTouch(1).phase == TouchPhase.Began)
// {
// mOldPosition1 = Input.GetTouch(0).position;
// mOldPosition2 = Input.GetTouch(1).position;
// mBoolEnlage = true;
// }
// if (Input.GetTouch(0).phase == TouchPhase.Ended || Input.GetTouch(1).phase == TouchPhase.Ended)
// {
// mBoolDiminish = true;
// }
// tempPosition1 = Input.GetTouch(0).position;
// tempPosition2 = Input.GetTouch(1).position;
// if (mBoolEnlage && mBoolDiminish)
// {
// float leng1 = Mathf.Sqrt((mOldPosition1.x - mOldPosition2.x) * (mOldPosition1.x - mOldPosition2.x) + (mOldPosition1.y - mOldPosition2.y) * (mOldPosition1.y - mOldPosition2.y));
// float leng2 = Mathf.Sqrt((tempPosition1.x - tempPosition2.x) * (tempPosition1.x - tempPosition2.x) + (tempPosition1.y - tempPosition2.y) * (tempPosition1.y - tempPosition2.y));
// if (leng1 - leng2 < -changeOffset)
// {
// // 放大手势
// text2.text = "我放大了";
// touchEvent.OnEnlargeTouch(leng1 - leng2);
// mBoolEnlage = false;
// mBoolDiminish = false;
// }
// else if (leng1 - leng2 > changeOffset)
// {
// // 缩小手势
// text2.text = "我缩小了";
// touchEvent.OnDiminishTouch(leng1 - leng2);
// mBoolEnlage = false;
// mBoolDiminish = false;
// }
// }
//实时变大变小
if (Input.GetTouch(0).phase == TouchPhase.Began || Input.GetTouch(1).phase == TouchPhase.Began)
{
mOldPosition1 = Input.GetTouch(0).position;
mOldPosition2 = Input.GetTouch(1).position;
}
if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)
{
Vector2 tempPosition1 = Input.GetTouch(0).position;
Vector2 tempPosition2 = Input.GetTouch(1).position;
float leng1 = Mathf.Sqrt((mOldPosition1.x - mOldPosition2.x) * (mOldPosition1.x - mOldPosition2.x) + (mOldPosition1.y - mOldPosition2.y) * (mOldPosition1.y - mOldPosition2.y));
float leng2 = Mathf.Sqrt((tempPosition1.x - tempPosition2.x) * (tempPosition1.x - tempPosition2.x) + (tempPosition1.y - tempPosition2.y) * (tempPosition1.y - tempPosition2.y));
if (leng1 - leng2 < -changeOffset)
{
// 放大手势
text2.text = "我放大了";
targetObj.transform.localScale += targetObj.transform.localScale * Time.deltaTime;
}
else if (leng1 - leng2 > changeOffset)
{
// 缩小手势
text2.text = "我缩小了";
targetObj.transform.localScale -= targetObj.transform.localScale * Time.deltaTime;
//targetObj.transform.localScale
}
mOldPosition1 = tempPosition1;
mOldPosition2 = tempPosition2;
}
oneBool = false;
}
}
}
}