Unity3d学习之路-(伪)太阳系

Unity3d学习之路-(伪)太阳系


  • 作业需求:写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上。

  • 需求分析:
    1.实现其他星球围绕太阳:使用RotateAround函数,围绕着父结点(太阳)进行旋转
    2.转速必须不一样:使用一个public变量speed,让其他星球按照不同速度进行旋转
    3.不在一个法平面上:每个星球,随机一个围绕的角度
    4.每个星球以及太阳都有自转:围绕自己的y轴进行旋转

游戏实现

  • 布置场景
    在Hierarcy中添加Sphere,并且设置大小和Mesh,然后根据每个行星与太阳距离的次序一次排开摆放,因为旋转的时候没有设置按照父节点旋转的距离,所以在初始摆放的时候,按照距离排开,然后把行星都作为太阳的孩子
    photo

  • 代码实现:

    • 公转代码
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大小

  • 完成效果
    demo

猜你喜欢

转载自blog.csdn.net/C486C/article/details/79781580