Unity物体基本运动

基础

1.获取方向键

1
2
3
4
Input.GetAxis("Horizontal") > 0; //右方向键
Input.GetAxis("Horizontal") < 0; //左方向键
Input.GetAxis("Vertical") > 0; //上方向键
Input.GetAxis("Vertical") < 0; //下方向键

2.获取键盘
KeyCode 列表请参考Unity官网:https://docs.unity3d.com/ScriptReference/KeyCode.html

1
2
3
4
5
Input.anyKeyDown //任意键按下
Input.anyKey //任意键按下不放
Input.GetKey(KeyCode.A) //字母“A”按下不放
Input.GetKeyDown(KeyCode.Space) //空格键按下
Input.GetKeyUp(KeyCode.Escape) //Esc键松开

3.获取鼠标点击

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Input.GetMouseButton(0) //按压鼠标左键
Input.GetMouseButton(1) //按压鼠标右键
Input.GetMouseButton(2) //按压滚轮键(待验证)
Input.GetMouseButtonDown(0) //点击鼠标左键
Input.GetMouseButtonDown(1) //点击鼠标右键
Input.GetMouseButtonDown(2) //点击滚轮键(待验证)
Input.GetMouseButtonUp(0) //抬起鼠标左键
Input.GetMouseButtonUp(1) //抬起鼠标右键
Input.GetMouseButtonUp(2) //抬起滚轮键
Input.mousePosition //鼠标点击的像素位置
Input.GetAxis("Mouse X")>0 //鼠标沿着屏幕X移动时触发,向右
Input.GetAxis("Mouse X")<0 //鼠标沿着屏幕X移动时触发,向左
Input.GetAxis("Mouse Y")>0 //鼠标沿着屏幕Y移动时触发,向上
Input.GetAxis("Mouse Y")<0 //鼠标沿着屏幕Y移动时触发,向下

4.获取滚轮的滚动

1
2
Input.GetAxis("Mouse ScrollWheel")>0 //向上滚动
Input.GetAxis("Mouse ScrollWheel")<0 //向下滚动

5.获取触摸屏参数

1
2
3
4
Input.touchCount //触摸手指个数
Input.GetTouch(i) //得到第i个触摸手指
if (Input.GetTouch(0).phase == TouchPhase.Moved) //判断手指是否触摸移动
Input.GetTouch(0).deltaPosition //从上一帧开始获取手指的移动

TouchPhase类型:
paste image

物体移动

1.指定方向移动
2.全方向移动
3.坐标移动

指定方向移动和全方位移动,都是按照物体本身的轴所移动的,坐标移动是按照世界坐标移动的。
示例:

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
public float speed = 1f;
void Update () {
//指定方向移动
if (Input.GetAxis("Horizontal") > 0) //左右方向键,>0为右方向键
{
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
if(Input.GetAxis("Vertical") < 0) //上下方向键,<0为下方向键
{
transform.Translate(Vector3.right * speed * Time.deltaTime);
}
//全方向移动
if (Input.GetKey(KeyCode.K))
{
transform.Translate(speed * Time.deltaTime,0, speed*Time.deltaTime);
}
//坐标移动
if (Input.GetKey(KeyCode.Z))
{
transform.localPosition += new Vector3(speed * Time.deltaTime, 0, speed * Time.deltaTime);
}
if(Input.GetKey(KeyCode.M))
{
transform.position += new Vector3(speed * Time.deltaTime, 0, speed * Time.deltaTime);
}
}

物体旋转

1.Rotate();
2.transform.localRotation,transform.rotation
3.RotateAround();RotateAroundLocal();

上面前两个比较常用,RotateAround 主要是围绕其他的物体做运动

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
public float speed = 2f;
public Transform roundTran;
public Vector3 rotateQua = Vector3.zero;
private void Start()
{
roundTran = this.transform.parent;
}
void Update () {
if(Input.GetKey(KeyCode.R))
{
transform.Rotate(Vector3.up * speed * Time.deltaTime);
}
if(Input.GetMouseButton(0)) //点击鼠标左键
{
transform.RotateAround(roundTran.transform.localPosition,Vector3.forward,speed *Time.deltaTime);
}
if(Input.touchCount>0 && Input.GetTouch(0).phase == TouchPhase.Moved) //触摸屏,点击一个手指,并且移动时
{
Vector2 touchDeltaPos = Input.GetTouch(0).deltaPosition;
transform.localRotation = Quaternion.Euler(touchDeltaPos.x * speed * Time.deltaTime, 0, touchDeltaPos.y * speed * Time.deltaTime);
}
if(Input.GetKey(KeyCode.L))
{
rotateQua += new Vector3(10 * speed * Time.deltaTime, 10 * speed * Time.deltaTime, 0);
transform.localRotation = Quaternion.Euler(rotateQua);
}
}

物体缩放

1.localScale
2.相机的拉近拉远,Camera的filedOfView

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
public float speed = 3;
RaycastHit hit;
private float scale = 1;
private float cameraField = 60;
void Start()
{
cameraField = Camera.main.fieldOfView;
}
void Update()
{
//从主摄像机发射一条射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
if(hit.transform == this.transform)
{
if (Input.GetAxis("Mouse ScrollWheel") != 0)
{
scale += Input.GetAxis("Mouse ScrollWheel") * speed * Time.deltaTime;
transform.localScale = new Vector3(scale, scale, scale);
//设置Camera的fieldOfView来放大缩小物体,其实不太好,除非一开始摄像机就看向物体。
//cameraField += -1 * Input.GetAxis("Mouse ScrollWheel") * speed * Time.deltaTime;
//Camera.main.fieldOfView = cameraField;
//Camera.main.transform.LookAt(this.transform);
}
}
}
}

其中四元数是略懂,只是知道能够防止万向锁,希望在应用中深入理解吧

参考网址:
http://www.cnblogs.com/fortomorrow/archive/2012/10/30/unity05.html
四元数:http://blog.csdn.net/candycat1992/article/details/41254799
http://www.taikr.com/article/535

坚持原创技术分享,您的支持将鼓励我继续创作!