一.在 Unity 中,实现运动的常见手段有哪些(自少四种)。请用一个物体的运动,用不 同不同方法实现。(如:修改 Transform 属性,使用向量 Vector3 的方法...)
方法 1:用函数实现简单运动
PublicclassMoveLeft:MonoBehaviour{
Void start(){}
Void update(){
this.transform.position+=Vector3.left*Time.deltaTime;
}
方法 2:用 Transform 组件
Public function Translate(translation:Vector3,relativeTo:Space=Spaze.Self):void;
transform.position 可以更快实现移动。
方法 3:通过 Rigidbody 组件移动物体,如
function FixedUpdate(){
rigidbody.AddForce(Vector3.up*10);
}
方法 4:通过 CharacterController 组件移动物体
public class ExampleClass:MonoBehaviour{
public float speed=3.0F;
public float rotateSpeed=3.0F;
void Update(){
CharacterControllercontroller=GetComponent<CharacterController>();
transform.Rotate(0,Input.GetAxis("Horizontal")*rotateSpeed,0);
Vector3 forward=transform.TransformDirection(Vector3.forward);
float curSpeed=speed*Input.GetAxis("Vertical");
controller.SimpleMove(forward*curSpeed); } }
二.写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在 一个法平面上。
1. 将太阳系所有星球延 X 轴依次排列开,很容易知道行星的旋转法线是(0,Y,Z),因此 要确保行星不在一个法平面上,只需确保 Y/Z 不相等即可。
2. 使用 Transform 对象的 RotateAround 方法,该方法接受 3 个参数,第一个是围绕的旋转点, 在这里即太阳的位置,第二个是旋转的法向量,在这里法向量在(0,Y,Z)平面上,第三 个是旋转的速度。为了方便设置旋转中心和速度,我将它们设置成了公有变量。
public class rotate:MonoBehaviour{
public Transformorigin;
public float speed=20; floatry,rz;
void Start(){
ry=Random.Range(1,360);
rz=Random.Range(1,360);
}
void Update(){
Vector3axis=newVector3(0,ry,rz);
this.transform.RotateAround(origin.position,axis,speed*Time.deltaTime);
}}