unity實現(xiàn)多點觸控代碼
更新時間:2015年03月30日 11:28:27 投稿:hebedich
這篇文章主要介紹了unity實現(xiàn)多點觸控代碼,我最近在學(xué)習(xí)Unity游戲引擎。先從Unity平面開始,本章介紹Unity 平面上的多點觸摸。有需要的小伙伴參考下。
這是我在論壇看到的,unity多點觸控。感覺還不錯,分享給大家
//用于綁定參照物對象
var target : Transform;
//縮放系數(shù)
var distance = 10.0;
//左右滑動移動速度
var xSpeed = 250.0;
var ySpeed = 120.0;
//縮放限制系數(shù)
var yMinLimit = -20;
var yMaxLimit = 80;
//攝像頭的位置
var x = 0.0;
var y = 0.0;
//記錄上一次手機觸摸位置判斷用戶是在左放大還是縮小手勢
private var oldPosition1 : Vector2;
private var oldPosition2 : Vector2;
//初始化游戲信息設(shè)置
function Start () {
var angles = transform.eulerAngles;
x = angles.y;
y = angles.x;
// Make the rigid body not change rotation
if (rigidbody)
rigidbody.freezeRotation = true;
}
function Update ()
{
//判斷觸摸數(shù)量為單點觸摸
if(Input.touchCount == 1)
{
//觸摸類型為移動觸摸
if(Input.GetTouch(0).phase==TouchPhase.Moved)
{
//根據(jù)觸摸點計算X與Y位置
x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
}
}
//判斷觸摸數(shù)量為多點觸摸
if(Input.touchCount >1 )
{
//前兩只手指觸摸類型都為移動觸摸
if(Input.GetTouch(0).phase==TouchPhase.Moved¦¦Input.GetTouch(1).phase==TouchPhase.Moved)
{
//計算出當(dāng)前兩點觸摸點的位置
var tempPosition1 = Input.GetTouch(0).position;
var tempPosition2 = Input.GetTouch(1).position;
//函數(shù)返回真為放大,返回假為縮小
if(isEnlarge(oldPosition1,oldPosition2,tempPosition1,tempPosition2))
{
//放大系數(shù)超過3以后不允許繼續(xù)放大
//這里的數(shù)據(jù)是根據(jù)我項目中的模型而調(diào)節(jié)的,大家可以自己任意修改
if(distance > 3)
{
distance -= 0.5;
}
}else
{
//縮小洗漱返回18.5后不允許繼續(xù)縮小
//這里的數(shù)據(jù)是根據(jù)我項目中的模型而調(diào)節(jié)的,大家可以自己任意修改
if(distance < 18.5)
{
distance += 0.5;
}
}
//備份上一次觸摸點的位置,用于對比
oldPosition1=tempPosition1;
oldPosition2=tempPosition2;
}
}
}
//函數(shù)返回真為放大,返回假為縮小
function isEnlarge(oP1 : Vector2,oP2 : Vector2,nP1 : Vector2,nP2 : Vector2) : boolean
{
//函數(shù)傳入上一次觸摸兩點的位置與本次觸摸兩點的位置計算出用戶的手勢
var leng1 =Mathf.Sqrt((oP1.x-oP2.x)*(oP1.x-oP2.x)+(oP1.y-oP2.y)*(oP1.y-oP2.y));
var leng2 =Mathf.Sqrt((nP1.x-nP2.x)*(nP1.x-nP2.x)+(nP1.y-nP2.y)*(nP1.y-nP2.y));
if(leng1<leng2)
{
//放大手勢
return true;
}else
{
//縮小手勢
return false;
}
}
//Update方法一旦調(diào)用結(jié)束以后進(jìn)入這里算出重置攝像機的位置
function LateUpdate () {
//target為我們綁定的箱子變量,縮放旋轉(zhuǎn)的參照物
if (target) {
//重置攝像機的位置
y = ClampAngle(y, yMinLimit, yMaxLimit);
var rotation = Quaternion.Euler(y, x, 0);
var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
transform.rotation = rotation;
transform.position = position;
}
}
static function ClampAngle (angle : float, min : float, max : float) {
if (angle < -360)
angle += 360;
if (angle > 360)
angle -= 360;
return Mathf.Clamp (angle, min, max);
}
以上所述就是本文的全部內(nèi)容了,有需要的小伙伴可以參考下
您可能感興趣的文章:
C#用RabbitMQ實現(xiàn)消息訂閱與發(fā)布
在消息隊列模型中,如何將消息廣播到所有的消費者,這種模式成為“發(fā)布/訂閱”。本文主要以一個簡單的小例子,簡述通過fanout交換機,實現(xiàn)消息的發(fā)布與訂閱,僅供學(xué)習(xí)分享使用,如有不足之處,還請指正。
2021-05-05
linux操作系統(tǒng)安裝MONO執(zhí)行C#程序的詳解步驟
這篇文章主要介紹了linux操作系統(tǒng)安裝MONO執(zhí)行C#程序詳解步驟,有需要的可以參考一下
2013-12-12
C#?利用Autofac批量接口注入依賴的問題小結(jié)
這篇文章主要介紹了C#?利用Autofac批量接口注入依賴的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
2021-12-12
C#實現(xiàn)帶引導(dǎo)窗體的窗體設(shè)計操作流程
很多時候,我們的窗體設(shè)計需要一個引導(dǎo)窗體,當(dāng)打開一個項目的窗體時,默認(rèn)的是先打開一個歡迎或介紹項目信息的引導(dǎo)窗體,幾秒鐘后再打開項目的主窗體,本文給大家介紹了C#實現(xiàn)帶引導(dǎo)窗體的窗體設(shè)計操作流程,感興趣的朋友可以參考下
2024-04-04 
