方法一:
复制代码
方法二:
复制代码
方法三(带惯性的拖拽):
复制代码
原文地址来源: http://game.ceeger.com/forum/read.php?tid=10004&fid=2
另外加入了缩放的代码,缩放、自动旋转、拖拽物体的综合:
复制代码
复制代码
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
|
private
Transform hitTransfrom;
void
Update()
{
if
(Input.GetMouseButtonDown(0))
{
RaycastHit hit;
Ray mouseray = Camera.main.ScreenPointToRay(Input.mousePosition);
if
(Physics.Raycast(mouseray,
out
hit))
{
hitTransfrom = hit.transform;
}
}
else
if
(Input.GetMouseButtonUp(0))
{
hitTransfrom =
null
;
}
if
(hitTransfrom)
{
Matrix4x4 localmatrix = hitTransfrom.worldToLocalMatrix;
Vector3 vUp = localmatrix.MultiplyVector(
new
Vector3(0, 1, 0));
Vector3 vRight = -localmatrix.MultiplyVector(
new
Vector3(1, 0, 0));
float
fMoveX = -Input.GetAxis(
"Mouse X"
) * Time.deltaTime * 200.0f;
Quaternion rotation = Quaternion.AngleAxis(fMoveX, vUp);
hitTransfrom.localRotation *= rotation;
float
fMoveY = -Input.GetAxis(
"Mouse Y"
) * Time.deltaTime * 200.0f;
Quaternion rotoy = Quaternion.AngleAxis(fMoveY, vRight);
hitTransfrom.localRotation *= rotoy;
}
}
|
复制代码
1
2
3
4
5
6
7
8
9
10
11
|
using
UnityEngine;
using
System.Collections;
public
class
DragRotate : MonoBehaviour
{
void
OnMouseDrag ()
{
this
.transform.Rotate(
new
Vector3(Input.GetAxis(
"Mouse Y"
),-Input.GetAxis(
"Mouse X"
),0)*6f,Space.World);
}
}
|
方法三(带惯性的拖拽):
复制代码
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
|
using
UnityEngine;
using
System.Collections;
public
class
DragRotate : MonoBehaviour
{
private
bool
onDrag =
false
;
public
float
speed = 6f;
private
float
tempSpeed;
private
float
axisX;
private
float
axisY;
void
OnMouseDrag ()
{
onDrag =
true
;
axisX=-Input.GetAxis (
"Mouse X"
);
axisY=Input.GetAxis (
"Mouse Y"
);
}
float
Rigid ()
{
if
(onDrag) {
if
(tempSpeed < speed) {
tempSpeed += speed * Time.deltaTime*5;
}
else
{
tempSpeed=speed;
}
}
else
{
if
(tempSpeed>0){
tempSpeed-=speed * Time.deltaTime;
}
else
{
tempSpeed = 0;
}
}
return
tempSpeed;
}
void
Update ()
{
this
.transform.Rotate (
new
Vector3 (axisY, axisX, 0) * Rigid (), Space.World);
if
(!Input.GetMouseButton (0)) {
onDrag =
false
;
}
}
}
|
原文地址来源: http://game.ceeger.com/forum/read.php?tid=10004&fid=2
另外加入了缩放的代码,缩放、自动旋转、拖拽物体的综合:
复制代码
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
104
105
106
107
108
109
110
111
112
113
|
using
UnityEngine;
using
System.Collections;
/**
* @Function:使物体自动旋转,鼠标能够360°拖转物体,托转物体的时候,自动旋转停止,同时滚轮实现物体的缩放功能
* @Ahthor:黄杰
* @Date:2013-04-24
*/
public
class
ZoomAndDrag : MonoBehaviour {
public
Camera MainCamera;
public
float
ZoomMin;
//滚轮的最小值
public
float
ZoomMax;
//滚轮的最大值
private
float
normalDistance;
//设置摄像机的景深值
private
float
MouseWheelSencitivity = 10.0f;
//鼠标灵敏度,就是缩放的速度的快慢
private
float
axisX;
private
float
axisY;
public
float
speed = 6f;
private
float
tempSpeed;
private
bool
RoationOnly;
void
Start ()
{
normalDistance = 50.0f;
ZoomMin = 20.0f;
ZoomMax = 100.0f;
RoationOnly =
true
;
}
void
Update ()
{
Roation();
Zoom();
this
.transform.Rotate(
new
Vector3(axisY, axisX, 0) * Rigid(), Space.World);
//物体旋转的方法
}
//自动旋转物体的方法,放在Update中调用
void
Roation()
{
if
(RoationOnly)
{
gameObject.transform.Rotate(Vector3.up * Time.deltaTime * 10);
}
}
/****
*鼠标滚轮缩放物体的方法
*
* **/
void
Zoom()
{
if
(Input.GetAxis(
"Mouse ScrollWheel"
) != 0)
{
if
(normalDistance >= ZoomMin && normalDistance <= ZoomMax)
{
normalDistance -= Input.GetAxis(
"Mouse ScrollWheel"
) * MouseWheelSencitivity;
}
if
(normalDistance < ZoomMin)
{
normalDistance = ZoomMin;
}
if
(normalDistance > ZoomMax)
{
normalDistance = ZoomMax;
}
MainCamera.fieldOfView = normalDistance;
}
}
/***
*
* 鼠标左键控制物体360°旋转+惯性
* **/
float
Rigid()
{
if
(Input.GetMouseButton(0))
{
RoationOnly =
false
;
//当鼠标按下的时候,停止自动旋转
axisX = Input.GetAxis(
"Mouse X"
);
axisY = Input.GetAxis(
"Mouse Y"
);
if
(tempSpeed < speed)
{
tempSpeed += speed * Time.deltaTime * 5;
}
else
{
tempSpeed = speed;
}
}
else
{
RoationOnly =
true
;
//当鼠标没有按下的时候,恢复自动旋转
if
(tempSpeed > 0)
{
tempSpeed -= speed * Time.deltaTime;
}
else
{
tempSpeed = 0;
}
}
return
tempSpeed;
}
}
|