Unity3D学习(3)——物体的运动&简易太阳系
2017-04-16 11:11
429 查看
这一节我们将探究物体的运动,并且尝试制作一个简易的太阳系。
在Unity中,实现运动的常见手段有如下几种:
修改Transform属性,比如Translate, Rotate, RotateAround, LookAt等
使用向量Vector3的方法,进行规范化等操作,或进行向量之间的运算
修改四元素和欧拉角,二者都是等价3D空间旋转矩阵表示,可进行计算、旋转等操作
使用character controller类的move函数,数值以绝对运动形式表示
下面对上述方法的实现进行举例(均为使物体向右移动):
修改向量:
transform变换:
四元素:
move函数:
结合了以上知识,我们可以设计一个简易的太阳系。
首先创建一个太阳和八大行星(九个球体对象),沿X轴排列开来。为每个星球添加材质,这里为了简化,只是简单地为每个星球添加了颜色的材质。另外,为了更容易辨认太阳,将其放大2倍。初始的排列如下:
编写旋转脚本,挂载在八大行星对象上:
Rotate.cs
在inspector界面修改Rotate脚本的属性,修改遵循以下原则:所有行星都围绕太阳旋转,且不同星球的公转速度不同,离太阳越远的行星速度越慢。以木星的属性为例,界面如下:
为了方便查看八大行星公转轨迹,所有行星添加trail renderer组件,并修改轨迹宽度。以木星的属性为例,界面如下:
运行,模拟效果如图(由于视频大小限制,只截取了中间部分):
在Unity中,实现运动的常见手段有如下几种:
修改Transform属性,比如Translate, Rotate, RotateAround, LookAt等
使用向量Vector3的方法,进行规范化等操作,或进行向量之间的运算
修改四元素和欧拉角,二者都是等价3D空间旋转矩阵表示,可进行计算、旋转等操作
使用character controller类的move函数,数值以绝对运动形式表示
下面对上述方法的实现进行举例(均为使物体向右移动):
修改向量:
this.transform.position += Vector3.right * Time.deltaTime
transform变换:
transform.Rotate(Vctor3.right * speed * Time.deltaTime)
四元素:
transform.rotation = Quaternion.AngleAxis(degrees, transform.right) * transform.rotation
move函数:
CharacterController controller = GetComponent<CharacterController>(); Vector moveDirection = Vector3.right; Controller.Move(moveDirection * Time.deltaTime);
结合了以上知识,我们可以设计一个简易的太阳系。
首先创建一个太阳和八大行星(九个球体对象),沿X轴排列开来。为每个星球添加材质,这里为了简化,只是简单地为每个星球添加了颜色的材质。另外,为了更容易辨认太阳,将其放大2倍。初始的排列如下:
编写旋转脚本,挂载在八大行星对象上:
Rotate.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Rotate : MonoBehaviour { public Transform origin; public float speed = 20; float ry, rz; // 要使不同行星尽量不在同一法平面上,只需确保每个行星的Y、Z轴坐标之比不相等即可 // 故选用随机数模拟每个行星的Y、Z轴坐标 void Start() { ry = Random.Range(1, 360); rz = Random.Range(1, 360); } // 描述行星绕太阳旋转,此处使用了RotateAround函数 void Update() { Vector3 axis = new Vector(0, ry, rz); this.transform.RotateAround(origin.position, axis, speed*Time.deltaTime); } }
在inspector界面修改Rotate脚本的属性,修改遵循以下原则:所有行星都围绕太阳旋转,且不同星球的公转速度不同,离太阳越远的行星速度越慢。以木星的属性为例,界面如下:
为了方便查看八大行星公转轨迹,所有行星添加trail renderer组件,并修改轨迹宽度。以木星的属性为例,界面如下:
运行,模拟效果如图(由于视频大小限制,只截取了中间部分):
相关文章推荐
- OpenCV学习笔记(十七)——运动分析和物体跟踪Video
- xhtml & css 简易学习笔记(一)
- Unity3D 场景编辑器扩展学习笔记-Handles&Event
- Unity3D 学习教程 9 旋转 放大 移动 物体
- Unity3D 学习教程 4 创建物体
- OpenCV学习——物体跟踪的粒子滤波算法实现之RGB->HSV
- 学习UNITY3D网络插件photon pun和PhotonServer<一>
- unity3D基础学习 通过判断鼠标点击的是否是目标物体,物体旋转,滑动滚轮缩放拉近视角
- Unity3D基础学习 NGUI Example 7-Scroll View(Panel)制作固定包裹栏,点击传递参数显示物体
- Unity3D 学习 控制角色运动控制
- xhtml & css 简易学习笔记(一)
- xhtml & css 简易学习笔记(三)
- xhtml & css 简易学习笔记(三)
- Unity3D基础学习 加载场景时隐藏物体,点击显示时显示物体
- OpenCV学习笔记之--运动物体跟踪的camshift算法
- 简易物体运动
- xhtml & css 简易学习笔记(二)
- [Unity3D]简单的物体运动和外力作用
- javascript学习-原生javascript的小特效(多物体运动效果)
- 学习UNITY3D网络插件photon pun和PhotonServer<二>