#pragma strict
var perspectiveZoomSpeed:float= .5f;
var orthoZoomSpeed:float= .5f;
function Start () {
}
// Update is called once per frame
function Update ()
{
//Pinch To Zoom
if(Input.touchCount == 2)
{
var touchZero:Touch = Input.GetTouch(0);
var touchOne:Touch = Input.GetTouch(1);
var touchZeroPrevPos:Vector2 = touchZero.position - touchZero.deltaPosition;
var touchOnePrevPos:Vector2 = touchZero.position - touchZero.deltaPosition;
var prevTouchDeltaMag:float = (touchZeroPrevPos - touchOnePrevPos).magnitude;
var touchDetlaMag:float = (touchZero.position - touchOne.position).magnitude;
var deltaMagnitudeDiff:float = prevTouchDeltaMag - touchDetlaMag;
if(camera.isOrthoGraphic)
{
camera.orthographicSize += deltaMagnitudeDiff * orthoZoomSpeed;
camera.orthographicSize = Mathf.Max(camera.orthographicSize,.1f);
}
else
{
camera.fieldOfView += deltaMagnitudeDiff * perspectiveZoomSpeed;
camera.fieldOfView = Mathf.Clamp(camera.fieldOfView,.1f,179.9f);
}
}
}
------------------------------------
分享: 7Headlines facebook PLURK twitter
大家一定再思考 Unity 製作 平板或手機的時候
如何要撰寫判斷左滑,右滑..等
兩指判斷放大縮小..等
想要達到切水果,快跑遊戲必熟悉的一項
以下是小編撰寫,範例程式 :
///////////////////////////
using UnityEngine;
using System.Collections;
public class gDefine {
public enum Direction{
Up,
Down,
Left,
Right
}
}
public class Example_Hand : MonoBehaviour {
//紀錄手指觸碰位置
private Vector2 m_screenPos = new Vector2 ();
void Update () {
#if UNITY_EDITOR || UNITY_STANDALONE
MouseInput(); // 滑鼠偵測
#elif UNITY_ANDROID
MobileInput(); // 觸碰偵測
#endif
}
void MouseInput()
{
if (Input.GetMouseButtonDown(0))
{
m_screenPos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
}
if(Input.GetMouseButtonUp(0))
{
Vector2 pos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
gDefine.Direction mDirection = HandDirection(m_screenPos, pos);
Debug.Log("mDirection: " + mDirection.ToString());
}
}
void MobileInput ()
{
if (Input.touchCount <= 0)
return;
//1個手指觸碰螢幕
if (Input.touchCount == 1) {
//開始觸碰
if (Input.touches [0].phase == TouchPhase.Began) {
Debug.Log("Began");
//紀錄觸碰位置
m_screenPos = Input.touches [0].position;
//手指移動
} else if (Input.touches [0].phase == TouchPhase.Moved) {
Debug.Log("Moved");
//移動攝影機
//Camera.main.transform.Translate (new Vector3 (-Input.touches [0].deltaPosition.x * Time.deltaTime, -Input.touches [0].deltaPosition.y * Time.deltaTime, 0));
}
//手指離開螢幕
if (Input.touches [0].phase == TouchPhase.Ended || Input.touches [0].phase == TouchPhase.Canceled) {
Debug.Log("Ended");
Vector2 pos = Input.touches [0].position;
gDefine.Direction mDirection = HandDirection(m_screenPos, pos);
Debug.Log("mDirection: " + mDirection.ToString());
}
//攝影機縮放,如果1個手指以上觸碰螢幕
} else if (Input.touchCount > 1) {
//記錄兩個手指位置
Vector2 finger1 = new Vector2 ();
Vector2 finger2 = new Vector2 ();
//記錄兩個手指移動距離
Vector2 move1 = new Vector2 ();
Vector2 move2 = new Vector2 ();
//是否是小於2點觸碰
for (int i=0; i<2; i++) {
UnityEngine.Touch touch = UnityEngine.Input.touches [i];
if (touch.phase == TouchPhase.Ended)
break;
if (touch.phase == TouchPhase.Moved) {
//每次都重置
float move = 0;
//觸碰一點
if (i == 0) {
finger1 = touch.position;
move1 = touch.deltaPosition;
//另一點
} else {
finger2 = touch.position;
move2 = touch.deltaPosition;
//取最大X
if (finger1.x > finger2.x) {
move = move1.x;
} else {
move = move2.x;
}
//取最大Y,並與取出的X累加
if (finger1.y > finger2.y) {
move += move1.y;
} else {
move += move2.y;
}
//當兩指距離越遠,Z位置加的越多,相反之
Camera.main.transform.Translate (0, 0, move * Time.deltaTime);
}
}
}//end for
}//end else if
}//end void
gDefine.Direction HandDirection(Vector2 StartPos, Vector2 EndPos)
{
gDefine.Direction mDirection;
//手指水平移動
if (Mathf.Abs (StartPos.x - EndPos.x) > Mathf.Abs (StartPos.y - EndPos.y)) {
if (StartPos.x > EndPos.x) {
//手指向左滑動
mDirection = gDefine.Direction.Left;
} else {
//手指向右滑動
mDirection = gDefine.Direction.Right;
}
} else {
if (m_screenPos.y > EndPos.y) {
//手指向下滑動
mDirection = gDefine.Direction.Down;
} else {
//手指向上滑動
mDirection = gDefine.Direction.Up;
}
}
return mDirection;
}
-------------------------------------------------
- Jan 20 Tue 2015 09:12
螢幕 放大旋轉
全站熱搜
留言列表