向量计算
在游戏开发中,我们使用向量来定义网络,方向和其他各种计算
Vector3.magnitude(),计算向量大小
点乘积为0时,代表两个向量垂直
比如创作一个飞行模拟器,你需要检查世界坐标系的上向量与飞机自身的前向量
如果这两个是垂直的,就是点乘积为0时,飞机承受的阻力最小;
随着点乘积为正且变大,我们可以知道飞机在拉升,我们可以增加一些阻力;
如果点乘积为负且增加,我们就知道飞机正在下潜
叉乘积产生的结果不是标量,是另外一个向量,这个新向量与原来的两个向量都垂直,可以用左手坐标系确定新向量的方向
比如计算旋转坦克炮台时,施加扭矩所需的油,已知当前炮台指向方向和它需要面朝的方向,你需要叉乘这两个向量,计算出旋转扭矩环绕的轴
组件使用与不使用
使用 enabled标志位
`public class LightController : MonoBehaviour
{
Light myLight;
// Start is called before the first frame update
void Start()
{
//初始化对象
myLight = GetComponent<Light>();
}
// Update is called once per frame
void Update()
{
//对对象进行操作
if (Input.GetKeyDown(KeyCode.Space))
{
myLight.enabled = !myLight.enabled;
}
if (Input.GetKeyDown(KeyCode.Q))
{
myLight.color = Color.red;
}
if (Input.GetKeyDown(KeyCode.W))
{
myLight.color = Color.white;
}
}
}`
游戏对象激活控制
使用 SetActive()控制对象的激活,即是否显示在屏幕上
Translate和Rotate函数
Translate和Rotate函数是用来修改游戏对象位置和旋转的函数
transform.Translate(new Vector3(1, 0, 0));
代表X轴移动一个单位,如果是在Update()中,则每帧移动一个单位
通常会在后面乘以 Time.deltaTime
transform.Translate(new Vector3(1, 0, 0)*Time.deltaTime);
这意味着移动速度是米每秒,而不是米每帧
Unity中设置了快捷写法
注意:
①这些函数都在本地坐标系工作,而不是世界坐标系,以上用法都是相对与其应用的对象的坐标的
②如果移动带碰撞体的物体,有时候它会发生物理交互,这就不应该使用translate和rotate,应使用物理类的函数;如需使用,就要拥有一个运动学的刚体
即rigidbody中 isKinematic 为 true
LookAt函数
LookAt函数可以用来使游戏对象的前方向指向世界里的另外一个位置
transform.LookAt(target);
注意:本地坐标的前方向会一直指向目标对象,世界坐标的摄像头则不会
Destory函数
Destory函数可以在运行时移除游戏对象,或者对象上的组件,也可以在移除前加一个延时
GetAxis函数
类似GetButton和GetKey;
区别:GetButton和GetKey返回布尔值,表示按键有没有被按下
GetAxis返回的是浮点数(-1~1)
OnMouseDown函数
OnMouseDown函数可以检测在碰撞体或者GUI元素上的点击