input.touch拖动物体
using UnityEngine;
using System.Collections;
public class FollowCube : MonoBehaviour
{
//用于綁定參照物對象
public Transform target;
//縮放限制的系數
private float minVertical = 0f;
private float maxVertical = 85f;
//攝像頭的位置
private float x = 0.0f;
private float y = 0.0f;
//縮放系數
private float distance = 0.0f;
//記錄上一次用戶觸摸的位置判斷用戶是放大還是縮小的手勢
private float newdis = 0;
private float olddis = 0;
// Use this for initialization
void Start()
{//初始化數據
distance = (transform.position - target.position).magnitude;
}
// Update is called once per frame
void Update()
{ //初始化游戲信息設置
//每幀旋轉攝像機,使它保持注視目標
transform.LookAt(target);
//一秒來計算,一幀完成的時間
float dt = Time.deltaTime;
//繞世界坐標旋轉的角度
x = transform.eulerAngles.y;
y = transform.eulerAngles.x;
if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer)
{
//判斷是否是單點觸摸
if (Input.touchCount == 1)
{//判斷是是類型為移動觸摸
if (Input.GetTouch(0).phase == TouchPhase.Moved)
{ //根據觸摸點計算x和y的位置,然后重置位置
//target.transform.Translate(Vector3.forward * Time.deltaTime * 5);
//target.transform.LookAt(target.position);
float x1 = Input.GetAxis("Mouse X");
float y1 = Input.GetAxis("Mouse Y");
x += x1 * dt * 150;
y += -y1 * dt * 150;
SetPos(x, y);
}
}
//判斷為2點觸摸
if (Input.touchCount == 2)
{//判斷觸摸的類型是這兩個點移動觸摸
if (Input.GetTouch(0).phase == TouchPhase.Moved && Input.GetTouch(1).phase == TouchPhase.Moved)
{//根據兩個點的位置重新設置生成新的觸摸點的位置
Vector3 s1 = Input.GetTouch(0).position;
Vector3 s2 = Input.GetTouch(1).position;
newdis = Vector2.Distance(s1, s2);
//判斷新生成的位置是否大于原始的位置,函數返回真是為放大手勢,假為縮小手勢
if (newdis > olddis)
{
distance -= Time.deltaTime * 50f;
}
if (newdis < olddis)
{
distance += Time.deltaTime * 50f;
}
//備份上一次觸摸點的位置,用于對比
print("distance = " + distance);
SetPos(x, y);
olddis = newdis;
}
}
}
else
{//判斷鼠標是否為左鍵點擊。函數返回真旋轉
if (Input.GetMouseButton(0))
{
float x1 = Input.GetAxis("Mouse X");
float y1 = Input.GetAxis("Mouse Y");
x += x1 * dt * 150f;
y += -y1 * dt * 150f;
SetPos(x, y);
}
if (Input.GetAxis("Mouse ScrollWheel") != 0)
{
distance -= Input.GetAxis("Mouse ScrollWheel");
SetPos(x, y);
}
}
}
void SetPos(float x, float y)
{
y = ClampAngle(y, minVertical, maxVertical);
var rotation = Quaternion.Euler(y, x, 0.0f);
var position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.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);
}
}
轉載于:https://www.cnblogs.com/ZeroMurder/p/5619233.html
總結
以上是生活随笔為你收集整理的input.touch拖动物体的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF 中Frame + Page 的使
- 下一篇: 安卓布局优化详解