摘要:这是一个简单的实现太阳系模拟运动的一个小程序,通过这个程序对于unity3D的运动的学习会有一个不错的理解,初步理解和实现运动的操作。
1、简答并用程序验证
- 游戏对象运动的本质是什么?
- 请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…)
- 写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上。
- 答:游戏对象运动的本质是通过游戏对象transform属性的position、rotation和scale等属性的变化来实现游戏对象位置的连续变化。
-
三种方法实现抛物线:由于我们知道抛物线如果在二维的情况下,那么它对应的模式应该是y = a * x^2 + b*x + c; (其中a,b,c均为常数)如果是三维的,那就是球面运动,应该满足:x^2 + y^2 + z^2 = R^2(其中R为常数)。这里因为着重只是为了显示一下抛物线的运动模型,那么选择了最简单的模型y = a * x^2 。三种实现方法如下:
通过transform.position直接修改
void Update () { this.transform.position += Vector3.right * Time.deltaTime; this.transform.position += 30 * Vector3.up * Time.deltaTime * Time.deltaTime; } 通过transform.translate修改
-
void Update () { transform.Translate(Vector3.right * Time.deltaTime);transform.Translate(30 * Vector3.up * Time.deltaTime * Time.deltaTime); }
通过RigidBody修改
Rigidbody rb;
// Use this for initialization
void Start () {
Physics.gravity = new Vector3(0, -10f, 0);//重力加速度
rb = this.GetComponent<Rigidbody>();
rb.velocity = new Vector3(0, 20, 10);
}
// Update is called once per frame
void FixedUpdate () {
Debug.Log(transform.position.ToString());
}
- 3.写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上。
首先大致规划一下太阳系和八大行星,如果要丰富其他资源我们还可以增加流星和陨石以及丰富各个星球的轨道卫星什么的。这里我们实现1个太阳和8大行星以及一个日月模型。首先从左到右依次排开8个行星和太阳,太阳的体积增大两倍更加直观的看出是太阳。其他行星大致设置一下大小并且引入材质,这样可以更加直观的模拟太阳系的行星。之后给每个行星添加一个rotate.cs的脚本文件,让他们伴随着太阳进行转动。代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class rotate : MonoBehaviour
{
public Transform origin;//设置围绕着什么转动
public float speed = 10; //转动的速度,可以调整
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);
}
} 通过修改参数我们能够实现各个星球以不同的个速度围绕着太阳以不同的轨道进行运动,之后我们为了实现日月地也在这个场景中能正常运动,我们先设置一个空对象跟地球一样的参数和运动,作为地球的虚像,之后再他底下增加一个sphere用于月球模型,同样增加rotate.cs脚本文件,以地球为中心转动,设置其他参数并且引入材质。即可实现整个模型。