/**
*Copyright(C) 2017 by
*All rights reserved.
*FileName: BuildAnimation.cs
*Author:
*Version: 1.0
*UnityVersion:5.5.1f1
*Date: 2017-03-16
*Description:
*History:
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BuildAnimation : MonoBehaviour {
//用于绑定参照物对象
Transform targe;
//缩放系数
float distance = 10f;
//左右滑动移动距离
float xSpeed = 250f;
float ySpeed = 120f;
//缩放限制系数
float yMinLimit = -20;
float yMaxLimit = 80;
//摄像头位置
float x = 0f;
float y = 0f;
//用于记录上一次的触摸位置
Vector2 oldPosition1;
Vector2 oldPosition2;
void Awake()
{
Vector3 angles = transform.eulerAngles;
x = angles.y;
y = angles.x;
// GetComponent<Rigidbody>()
//锁定物体旋转方向
GetComponent<Rigidbody>().freezeRotation = true;
}
void Update()
{
if (Input.touchCount == 1)
{
if(Input.GetTouch(0).phase == TouchPhase.Moved)
{
x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
y += Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
}
}
if (Input.touchCount > 1)
{
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;
if (isEnlarge(oldPosition1, oldPosition2, tempPosition1, tempPosition2))
{
if(distance > 3)
{
distance -= 0.5f;
}
else
{
if( distance < 18.50f)
distance += 0.5f;
}
}
oldPosition2 = tempPosition2;
oldPosition1 = tempPosition1;
}
}
}
bool isEnlarge(Vector2 old1,Vector2 old2,Vector2 p1,Vector2 p2)
{
float leng1 = Vector2.Distance(old1, old2);
float leng2 = Vector2.Distance(p1, p2);
if(leng1 < leng2)
{
//放大
return true;
}
//缩小
return false;
}
void LateUpdate()
{
if(targe)
{
y = ClampAngle(y, yMinLimit, yMaxLimit);
Quaternion rotation = Quaternion.Euler(y, x, 0);
Vector3 position = rotation *new Vector3(0, 0, -distance) + targe.position;
transform.rotation = rotation;
transform.position = position;
}
}
static float ClampAngle( float angle, float min, float max)
{
if (angle < -360)
angle += 360;
if (angle > 360)
angle -= 360;
return Mathf.Clamp(angle, min, max);
}
}
*Copyright(C) 2017 by
*All rights reserved.
*FileName: BuildAnimation.cs
*Author:
*Version: 1.0
*UnityVersion:5.5.1f1
*Date: 2017-03-16
*Description:
*History:
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BuildAnimation : MonoBehaviour {
//用于绑定参照物对象
Transform targe;
//缩放系数
float distance = 10f;
//左右滑动移动距离
float xSpeed = 250f;
float ySpeed = 120f;
//缩放限制系数
float yMinLimit = -20;
float yMaxLimit = 80;
//摄像头位置
float x = 0f;
float y = 0f;
//用于记录上一次的触摸位置
Vector2 oldPosition1;
Vector2 oldPosition2;
void Awake()
{
Vector3 angles = transform.eulerAngles;
x = angles.y;
y = angles.x;
// GetComponent<Rigidbody>()
//锁定物体旋转方向
GetComponent<Rigidbody>().freezeRotation = true;
}
void Update()
{
if (Input.touchCount == 1)
{
if(Input.GetTouch(0).phase == TouchPhase.Moved)
{
x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
y += Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
}
}
if (Input.touchCount > 1)
{
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;
if (isEnlarge(oldPosition1, oldPosition2, tempPosition1, tempPosition2))
{
if(distance > 3)
{
distance -= 0.5f;
}
else
{
if( distance < 18.50f)
distance += 0.5f;
}
}
oldPosition2 = tempPosition2;
oldPosition1 = tempPosition1;
}
}
}
bool isEnlarge(Vector2 old1,Vector2 old2,Vector2 p1,Vector2 p2)
{
float leng1 = Vector2.Distance(old1, old2);
float leng2 = Vector2.Distance(p1, p2);
if(leng1 < leng2)
{
//放大
return true;
}
//缩小
return false;
}
void LateUpdate()
{
if(targe)
{
y = ClampAngle(y, yMinLimit, yMaxLimit);
Quaternion rotation = Quaternion.Euler(y, x, 0);
Vector3 position = rotation *new Vector3(0, 0, -distance) + targe.position;
transform.rotation = rotation;
transform.position = position;
}
}
static float ClampAngle( float angle, float min, float max)
{
if (angle < -360)
angle += 360;
if (angle > 360)
angle -= 360;
return Mathf.Clamp(angle, min, max);
}
}