public void StartDrag( TouchData data ) { UpdatePosition( data ); this.data = data; isBeindHeld = true; //gameObject.layer = LayerMask.NameToLayer( layerWhileInteracting ); }
public Vector3 LimitForce( float force , TouchData data) { Vector3 appliedForce = data.worldRunningDelta * force; appliedForce.x = Mathf.Clamp( appliedForce.x, maxForce * -1, maxForce ); appliedForce.y = Mathf.Clamp( appliedForce.y, maxForce * -1, maxForce ); return appliedForce; }
public void StopDrag( TouchData data ) { //rigidbody.AddForce( data.runningDelta * force, ForceMode.Impulse); rigidbody.AddForce( LimitForce( force, data ), ForceMode.Impulse); rigidbody.mass = mass; this.data = data; isBeindHeld = false; }
void Start() { touchObjects = new List<TouchData>(); mouseData = null; }
void RemoveTouchData( TouchData data ) { touchObjects.Remove(data); }
void FixedUpdate() { Vector3 position; RaycastHit hit; if(Input.touchCount > 0) { //Debug.Log("----"); foreach (Touch touch in Input.touches) { position = touch.position; TouchData data; Debug.Log(touch.fingerId); if(touch.phase == TouchPhase.Began) { // create data if( FindCollision( position, out hit) ) { data = new TouchData( touch.fingerId, position, hit.collider.gameObject, hit ); AddTouchData( data ); // send message data.gameObject.SendMessage("StartDrag",data,SendMessageOptions.DontRequireReceiver); } }else if( HasTouchData( touch.fingerId ) ) { data = GetTouchData( touch.fingerId ); switch( touch.phase ) { case TouchPhase.Moved: // update data data.UpdatePosition( position ); // send message data.gameObject.SendMessage("UpdateDrag",data,SendMessageOptions.DontRequireReceiver); break; case TouchPhase.Stationary: break; case TouchPhase.Ended: // update data data.UpdatePosition( position ); // send message data.gameObject.SendMessage("StopDrag",data,SendMessageOptions.DontRequireReceiver); // remove data RemoveTouchData( data ); break; case TouchPhase.Canceled: break; } } } } if(allowMouseEmulation == false) return; position = Input.mousePosition; if(Input.GetMouseButtonDown(0)) { // find available object if( FindCollision( position, out hit) ) { // create data mouseData = new TouchData( 0, position, hit.collider.gameObject, hit ); // send message mouseData.gameObject.SendMessage("StartDrag",mouseData,SendMessageOptions.DontRequireReceiver); }else{ mouseData = null; } }else if(Input.GetMouseButtonUp(0)) { // find available object if(mouseData == null) return; // update data mouseData.UpdatePosition( position ); // send message if(mouseData.gameObject != null) mouseData.gameObject.SendMessage("StopDrag",mouseData,SendMessageOptions.DontRequireReceiver); // remove data mouseData = null; }else if(Input.GetMouseButton(0)) { // find available object if(mouseData == null) return; // update data mouseData.UpdatePosition( position ); // send message if(mouseData.gameObject != null) mouseData.gameObject.SendMessage("UpdateDrag",mouseData,SendMessageOptions.DontRequireReceiver); } }
void AddTouchData( TouchData data ) { if( !HasTouchData(data.index) ) touchObjects.Add( data ); }
void UpdatePosition( TouchData data ) { Vector3 position = data.worldPositionWithOffset; position.z = transform.position.z; transform.position = position; }
public void UpdateDrag( TouchData data ) { UpdatePosition( data ); this.data = data; }