001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
/
/
用于绑定参照物对象
var
target
:
Transform;
/
/
缩放系数
var distance
=
10.0
;
/
/
左右滑动移动速度
var xSpeed
=
250.0
;
var ySpeed
=
120.0
;
/
/
缩放限制系数
var yMinLimit
=
-20
;
var yMaxLimit
=
80
;
/
/
摄像头的位置
var x
=
0.0
;
var y
=
0.0
;
/
/
记录上一次手机触摸位置判断用户是在左放大还是缩小手势
private var oldPosition
1
:
Vector
2
;
private var oldPosition
2
:
Vector
2
;
/
/
初始化游戏信息设置
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
(
)
{
/
/
判断触摸数量为单点触摸
if
(
Input.touchCount
=
=
1
)
{
/
/
触摸类型为移动触摸
if
(
Input.GetTouch
(
0
)
.phase
=
=
TouchPhase.Moved
)
{
/
/
根据触摸点计算X与Y位置
x
+
=
Input.GetAxis
(
"Mouse X"
)
*
xSpeed
*
0.0
2
;
y
-
=
Input.GetAxis
(
"Mouse Y"
)
*
ySpeed
*
0.0
2
;
}
}
/
/
判断触摸数量为多点触摸
if
(
Input.touchCount
>
1
)
{
/
/
前两只手指触摸类型都为移动触摸
if
(
Input.GetTouch
(
0
)
.phase
=
=
TouchPhase.Moved¦¦Input.GetTouch
(
1
)
.phase
=
=
TouchPhase.Moved
)
{
/
/
计算出当前两点触摸点的位置
var tempPosition
1
=
Input.GetTouch
(
0
)
.
position
;
var tempPosition
2
=
Input.GetTouch
(
1
)
.
position
;
/
/
函数返回真为放大,返回假为缩小
if
(
isEnlarge
(
oldPosition
1
,
oldPosition
2
,
tempPosition
1
,
tempPosition
2
)
)
{
/
/
放大系数超过
3
以后不允许继续放大
/
/
这里的数据是根据我项目中的模型而调节的,大家可以自己任意修改
if
(
distance
>
3
)
{
distance
-
=
0.5
;
}
}
else
{
/
/
缩小洗漱返回
18.5
后不允许继续缩小
/
/
这里的数据是根据我项目中的模型而调节的,大家可以自己任意修改
if
(
distance
<
18.5
)
{
distance
+
=
0.5
;
}
}
/
/
备份上一次触摸点的位置,用于对比
oldPosition
1
=
tempPosition
1
;
oldPosition
2
=
tempPosition
2
;
}
}
}
/
/
函数返回真为放大,返回假为缩小
function isEnlarge
(
oP
1
:
Vector
2
,
oP
2
:
Vector
2
,
nP
1
:
Vector
2
,
nP
2
:
Vector
2
)
:
boolean
{
/
/
函数传入上一次触摸两点的位置与本次触摸两点的位置计算出用户的手势
var leng
1
=
Mathf.Sqrt
(
(
oP
1.
x
-
oP
2.
x
)
*
(
oP
1.
x
-
oP
2.
x
)
+
(
oP
1.
y
-
oP
2.
y
)
*
(
oP
1.
y
-
oP
2.
y
)
)
;
var leng
2
=
Mathf.Sqrt
(
(
nP
1.
x
-
nP
2.
x
)
*
(
nP
1.
x
-
nP
2.
x
)
+
(
nP
1.
y
-
nP
2.
y
)
*
(
nP
1.
y
-
nP
2.
y
)
)
;
if
(
leng
1
<
leng
2
)
{
/
/
放大手势
return
true
;
}
else
{
/
/
缩小手势
return
false
;
}
}
/
/
Update方法一旦调用结束以后进入这里算出重置摄像机的位置
function LateUpdate
(
)
{
/
/
target
为我们绑定的箱子变量,缩放旋转的参照物
if
(
target
)
{
/
/
重置摄像机的位置
y
=
ClampAngle
(
y
,
yMinLimit
,
yMaxLimit
)
;
var rotation
=
Quaternion.Euler
(
y
,
x
,
0
)
;
var
position
=
rotation
*
Vector
3
(
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
)
;
}
|