Unity3d学习之路-(伪)太阳系
作业需求:写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上。
需求分析:
1.实现其他星球围绕太阳:使用RotateAround函数,围绕着父结点(太阳)进行旋转
2.转速必须不一样:使用一个public变量speed,让其他星球按照不同速度进行旋转
3.不在一个法平面上:每个星球,随机一个围绕的角度
4.每个星球以及太阳都有自转:围绕自己的y轴进行旋转
游戏实现
布置场景
在Hierarcy中添加Sphere,并且设置大小和Mesh,然后根据每个行星与太阳距离的次序一次排开摆放,因为旋转的时候没有设置按照父节点旋转的距离,所以在初始摆放的时候,按照距离排开,然后把行星都作为太阳的孩子
代码实现:
- 公转代码
public class Move : MonoBehaviour {
public Transform father; //父节点的Transform
public float speed = 15; //速度
float ry, rx; //rotation x和rotation y
// Use this for initialization
void Start () {
rx = Random.Range(10, 300); //按照多少度的角度旋转
ry = Random.Range(10, 300);
}
// Update is called once per frame
void Update () {
this.transform.RotateAround(father.position, new Vector3(rx, ry, 0), speed * Time.deltaTime);
}
}
- 自转代码
public class RotationSelf : MonoBehaviour {
public float speed = 2; //自转速度
// Update is called once per frame
void Update () {
this.transform.RotateAround(this.transform.position, Vector3.up, speed);
}
}
挂载代码
将公转和自转代码挂载到各大行星上面,将自转代码挂载到太阳上面添加星球旋转轨道
为每个行星添加一个叫做Trail Renderer的Component,这个组件的作用是绘制出物体运动的轨迹,那么我们设置Time时候时间长一些,因为是做圆形运动,所以当下一次运动到同一个点的时候,轨迹还没有消失,其他的Trail Renderer属性可以访问官方查询https://docs.unity3d.com/Manual/class-TrailRenderer.html添加背景图片
使用一个Plane作为背景墙,调节相机的角度和Plane大小完成效果