前言
中山大学数据科学与计算机学院3D游戏课程学习记录博客。
简答题
-
游戏对象运动的本质是什么?
运动的本质就是游戏对象位置、角度和形状的改变。 -
请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…)
- 使用Vector3改变Position:
代码如下:
private float v=0.1f;
private float a=0.05f;
void Update() {
this.transform.position+=Vector3.right*v*Time.time;
this.transform.position+=Vector3.down*a*Time.time*Time.time;
}
水平方向为匀速运动,竖直方向为匀加速运动。
v代表水平方向的速度,a代表竖直方向的加速度。
- 使用Translate:
代码如下:
private float v=0.1f;
private float a=0.05f;
void Update() {
transform.Translate(Vector3.right*v*Time.fixedTime,Space.World);
transform.Translate(Vector3.down*a*Time.fixedTime*Time.fixedTime,Space.World);
}
- 计算运动过程中的position直接赋值:
代码如下:
private float vx=1f;
private float vy=0f;
void Update() {
vy+=0.001f;
Vector3 newPosition=new Vector3(Time.deltaTime*vx,-vy*Time.deltaTime,0);
transform.position+=newPosition;
}
vx代表水平方向的速度,vy代表竖直方向的速度。
编程练习
思考题
- 使用向量与变换,实现并扩展 Tranform 提供的方法,如 Rotate、RotateAround 等
- 使用向量与变换实现RotateAround:
void RotateAround(Transform t,Vector3 center,Vector axis,float angle){
var rot=Quaternion.AngleAxis(angle,axis);
t.position=(center+(t.position-center)*rot);
t.rotation=t.rotation*rot;
}
- 使用向量与变换实现Rotate:
void Rotate(Transform t,Vector3 axis,float angle){
var rot=Quaternion.AngleAxis(angle,axis);
t.rotation*=rot;
}
其中position表示物体的位置,rotation表示物体的角度。