PS:本系列笔记将会记录我此次在北京学习Unity开发的总体过程,方便后期写总结,笔记为日更。
笔记内容均为 自己理解,不保证每个都对。
脚本文件的名称必须和C#脚本的名称相同
运行时的执行顺序(截取自帮助文档):
Transform组件可以获得并修改 游戏物体的transform栏的信息
即位置,旋转,缩放
例如:
//this表示当前游戏物体,即脚本挂在什么物体上,this就指向该物体
Debug.Log(this.transform.position.x); //世界坐标X的值
Debug.Log(this.transform.localPosition.x); //父类坐标X的值
Debug.Log(this.transform.rotation.x); //世界旋转X的值
Debug.Log(this.transform.localRotation.x); //父类坐标旋转X的值
Debug.Log(this.transform.localScale.x); //父类坐标缩放X的值
Debug.Log(this.transform.lossyScale.x); //世界坐标缩放X的值
旋转主要通过Tranform组件下的Rotate和RotateAround来进行设置
Rotate的命名格式为:public void Rotate(Vector3 axis, float angle);
RotateAround的命名格式为:public void RotateAround(Vector3 point, Vector3 axis, float angle);
Vector 3:
表示 3维向量数组,表示3D的向量和点。用于在Unity传递3D位置和方向。它也包含做些普通向量运算的函数。除了下面列出的函数,其他类用于处理向量和点。例如Quaternion(四元数)和Matrix4x4类用于旋转或变换向量和点。
方法 | 含义 |
---|---|
Vector3.forward | Vector3(0, 0, 1).的缩写 |
Vector3.back | Vector3(0, 0, -1).的缩写 |
Vector3.up | writing Vector3(0, 1, 0).的缩写 |
Vector3.down | Vector3(0, -1, 0).的缩写 |
Vector3.left | Vector3(-1, 0, 0).的缩写 |
Vector3.right | Vector3(1, 0, 0).的缩写 |
Vector3.one | Vector3(1, 1, 1).的缩写 |
Vector3.zero | Vector3(0, 0, 0).的缩写 |
旋转的使用:
自转:
transform.Rotate(Vector3.up, 0.5f); //绕着Y轴旋转,速度为0.5f
公转:
public GameObject target; //目标中心
public float speed = 0.5f; //旋转速度
void Update()
{
transform.RotateAround(target.transform.position, Vector3.forward, speed);
}
由这两种代码,即可完成 太阳系的自传和公转模拟练习:
根据玩家所按下的 键进行相应的操作 以WSAD为例
Time.deltaTime(增量时间),若播放速度为1秒60帧,则增量时间为 1 / 60
if (Input.GetKey("w"))
{
tmpCube.transform.Translate(new Vector3(0.5f, 0, 0) * Time.deltaTime, Space.Self); //前进 (0.5f, 0, 0) * Time.deltaTime(增量时间)
}
if (Input.GetKey("s"))
{
tmpCube.transform.Translate(new Vector3(-0.5f, 0, 0) * Time.deltaTime, Space.Self); //后退 (-0.5f, 0, 0) * Time.deltaTime(增量时间)
}
if (Input.GetKey("a"))
{
this.transform.Rotate(new Vector3(0, -1, 0)); //旋转-1°
}
if (Input.GetKey("d"))
{
this.transform.Rotate(new Vector3(0, 1, 0)); //旋转1°
}
利用鼠标控制旋转:
public float tmpX = 0f;
public float tmpY = 0f;
float x = Input.GetAxis("Mouse X");
float y = Input.GetAxis("Mouse Y");
tmpX = tmpX + x;
tmpY = tmpY + y;
this.transform.rotation = Quaternion.Euler(0, tmpX * speed, 0); //绕着Y轴旋转