为了实现unity ListView 功能 自己写的触摸控制
using UnityEngine;
using System.Collections;
public class ScrollTouchMove : MonoBehaviour {
public Vector2 scrollPosition = Vector2.zero;
public float scrollVelocity = 0f;
public float timeTouchPhaseEnded = 0f;
public float inertiaDuration = 0.5f;
public Vector2 lastDeltaPos;
private Vector3 initPosition;
private Vector3 BarinitPosition;
private Transform _transform;
private float speed;
// Use this for initialization
void Start () {
_transform = transform;
initPosition = transform.position;
BarinitPosition = bar.position;
JisuanBar ();
SetTouchRegion ();
}
// Update is called once per frame
void Update () {
float YY = (top.localPosition.y - bttom.localPosition.y) - (topleft.localPosition.y - btomright.localPosition.y);
float YY1 = (topleft.localPosition.y - btomright.localPosition.y);
float YY2=(top.localPosition.y - bttom.localPosition.y);
}
void mymove(){
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) {
Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;
}
}
public static bool isPointerInBox(float x, float y, float[] box) {
return x >= box[0] && x <= box[2] && y >= box[1] && y <= box[3];
}
float[] RegionBox=new float[4];
void setBox (Vector2 point1,Vector2 point2)
{
RegionBox [0] = point1.x;
RegionBox [1] = point1.y;
RegionBox [2] = point2.x;
RegionBox [3] = point2.y;
}
public void SetTouchRegion(){
Vector2 topScPosition1=new Vector3(topleft.localPosition.x+Screen.width/2,Screen.height/2-topleft.localPosition.y,0f);
Vector2 topScPosition2=new Vector3(btomright.localPosition.x+Screen.width/2,Screen.height/2-btomright.localPosition.y,0f);
setBox (topScPosition1,topScPosition2);
}
public Transform topleft;
public Transform btomright;
public Transform top;
public Transform bttom;
Vector2 aa;
private Vector2 first = Vector2.zero;
private Vector2 second = Vector2.zero;
void OnGUI ()
{
if(Event.current.type == EventType.MouseDown)
{
first = Event.current.mousePosition ;
}
if(Event.current.type == EventType.MouseDrag)
{
second = Event.current.mousePosition ;
aa=second;
if(!isPointerInBox(Event.current.mousePosition.x,Event.current.mousePosition.y,RegionBox)){
Debug.Log("aaaaaaaaaaaaaaaa");
return;
}
if(first.y-second.y<0&&(top.position.y+(first.y-second.y)*0.005f)>topleft.position.y){
_transform.position=new Vector3(_transform.position.x,_transform.position.y+(first.y-second.y)*0.005f,_transform.position.z);
bar.position=new Vector3(bar.position.x,bar.position.y-(first.y-second.y)*0.005f*DisRate,bar.position.z);
}
if(first.y-second.y>0&&(bttom.position.y+(first.y-second.y)*0.005f)<btomright.position.y){
_transform.position=new Vector3(_transform.position.x,_transform.position.y+(first.y-second.y)*0.005f,_transform.position.z);
bar.position=new Vector3(bar.position.x,bar.position.y-(first.y-second.y)*0.005f*DisRate,bar.position.z);
}
first = second;
}
}
public Transform BACKpic;
public Transform bar;
float DisRate;
float DisRate2;
void JisuanBar(){
float YY = (top.localPosition.y - bttom.localPosition.y) - (topleft.localPosition.y - btomright.localPosition.y);
//BACKpic.localScale
Debug.Log("BACKpic.localScale:"+BACKpic.localScale);
float rate = (BACKpic.localScale.x-bar.localScale.y);
Debug.Log ("rate:"+rate);
DisRate = rate / YY;
}
}