Unity3D学习笔记(3)—— 制作简单的太阳系

        这次要实现一个简单的太阳系,太阳本身自带光源,其他星球围绕太阳的转速不一样(越远的公转越慢),且不在一个法平面上。

        首先,在场景中创建1个太阳和9大行星,然后将它们分别命名。9大行星的排列顺序是:水星、金星、地球、火星、木星、土星、天王星、海王星、冥王星?然后将它们延X轴依次排列开,这样做的目的是可以很容易知道行星的旋转法线是(0,Y,Z),因此要确保行星不在一个法平面上,只需确保Y/Z不相等即可。

               Unity3D学习笔记(3)—— 制作简单的太阳系_第1张图片     

        希望把太阳和其它行星区分开来,我决定给太阳以光明(我说要有光)。怎么办呢?Unity中并没有自发光组件,如果我们尝试在太阳上添加一个点光源,那么你肯定会发现奇怪的现象,太阳本身不发光,却会照亮他人...


              Unity3D学习笔记(3)—— 制作简单的太阳系_第2张图片

        所以我使用了Unity第三方插件Glow11,Unity载入插件的方法:menu->Assests->import package->custom package,注意路径不能有中文。Glow11的使用方法:在主摄像机上添加Glow11组件,创建一个Material材质球,选择Shader为Glow11的自发光shader,将材质球挂载到Sun对象上,调整材质球和点光源颜色即可。

Unity3D学习笔记(3)—— 制作简单的太阳系_第3张图片

Unity3D学习笔记(3)—— 制作简单的太阳系_第4张图片Unity3D学习笔记(3)—— 制作简单的太阳系_第5张图片

        接下来就是写脚本啦,脚本很简单,主要使用了Transform对象的RotateAround方法。该方法接受3个参数,第一个是围绕的旋转点,在这里即太阳的位置,第二个是旋转的法向量,在这里法向量在(0,Y,Z)平面上,第三个是旋转的速度。为了方便设置旋转中心和速度,我将它们设置成了公有变量。

public class rotate : MonoBehaviour {

    public Transform origin;
	public float speed = 20;
	float ry, rz;

	void Start() {
		ry = Random.Range(1, 360);
		rz = Random.Range(1, 360);
	}
	
    void Update () {
		Vector3 axis = new Vector3(0, ry, rz);
		this.transform.RotateAround(origin.position, axis, speed*Time.deltaTime);
	}
}
       随机Y和Z让行星尽量不在一个法平面上旋转。将脚本挂载到每一个行星上面,并设置好旋转中心(太阳)和旋转速度即可。

        为了让行星运行的轨迹显现出来,可以给每个行星添加足迹组件(effects->trailer render):


Unity3D学习笔记(3)—— 制作简单的太阳系_第6张图片


最终运行结果
Unity3D学习笔记(3)—— 制作简单的太阳系_第7张图片

你可能感兴趣的:(C#,unity3d)