把如下代码直接挂在摄像机对象上。最近心情很down,有点懒了就不写注释了,如果有朋友有疑问欢迎给我留言。。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
using
UnityEngine
;
using
System
.
Collections
;
public
class
Script_07_11
:
MonoBehaviour
{
public
Transform
target
;
private
int
MouseWheelSensitivity
=
1
;
private
int
MouseZoomMin
=
1
;
private
int
MouseZoomMax
=
5
;
private
float
normalDistance
=
3
;
private
Vector3
normalized
;
private
float
xSpeed
=
250.0f
;
private
float
ySpeed
=
120.0f
;
private
int
yMinLimit
=
-
20
;
private
int
yMaxLimit
=
80
;
private
float
x
=
0.0f
;
private
float
y
=
0.0f
;
private
Vector3
screenPoint
;
private
Vector3
offset
;
private
Quaternion
rotation
=
Quaternion
.
Euler
(
new
Vector3
(
30f
,
0f
,
0f
)
)
;
private
Vector3
CameraTarget
;
void
Start
(
)
{
CameraTarget
=
target
.
position
;
float
z
=
target
.
transform
.
position
.
z
-
normalDistance
;
transform
.
position
=
rotation
*
new
Vector3
(
transform
.
position
.
x
,
transform
.
position
.
y
,
z
)
;
transform
.
LookAt
(
target
)
;
var
angles
=
transform
.
eulerAngles
;
x
=
angles
.
y
;
y
=
angles
.
x
;
}
void
Update
(
)
{
if
(
Input
.
GetMouseButton
(
1
)
)
{
x
+=
Input
.
GetAxis
(
"Mouse X"
)
*
xSpeed
*
0.02f
;
y
-=
Input
.
GetAxis
(
"Mouse Y"
)
*
ySpeed
*
0.02f
;
y
=
ClampAngle
(
y
,
yMinLimit
,
yMaxLimit
)
;
var
rotation
=
Quaternion
.
Euler
(
y
,
x
,
0
)
;
var
position
=
rotation
*
new
Vector3
(
0.0f
,
0.0f
,
-
normalDistance
)
+
CameraTarget
;
transform
.
rotation
=
rotation
;
transform
.
position
=
position
;
}
else
if
(
Input
.
GetAxis
(
"Mouse ScrollWheel"
)
!=
0
)
{
normalized
=
(
transform
.
position
-
CameraTarget
)
.
normalized
;
if
(
normalDistance
>=
MouseZoomMin
&&
normalDistance
<=
MouseZoomMax
)
{
normalDistance
-=
Input
.
GetAxis
(
"Mouse ScrollWheel"
)
*
MouseWheelSensitivity
;
}
if
(
normalDistance
<
MouseZoomMin
)
{
normalDistance
=
MouseZoomMin
;
}
if
(
normalDistance
>
MouseZoomMax
)
{
normalDistance
=
MouseZoomMax
;
}
transform
.
position
=
normalized
*
normalDistance
;
}
else
if
(
Input
.
GetMouseButtonDown
(
2
)
)
{
screenPoint
=
Camera
.
main
.
WorldToScreenPoint
(
target
.
transform
.
position
)
;
offset
=
target
.
transform
.
position
-
Camera
.
main
.
ScreenToWorldPoint
(
new
Vector3
(
Input
.
mousePosition
.
x
,
Input
.
mousePosition
.
y
,
screenPoint
.
z
)
)
;
}
if
(
Input
.
GetMouseButton
(
2
)
)
{
Vector3
curScreenPoint
=
new
Vector3
(
Input
.
mousePosition
.
x
,
Input
.
mousePosition
.
y
,
screenPoint
.
z
)
;
Vector3
curPosition
=
Camera
.
main
.
ScreenToWorldPoint
(
curScreenPoint
)
+
offset
;
target
.
transform
.
position
=
curPosition
;
}
transform
.
LookAt
(
CameraTarget
)
;
}
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
)
;
}
}
|