Unity C#初级编程 学习笔记

https://learn.u3d.cn/tutorial/beginner-gameplay-scripting

矢量数学

向量的点积和叉积的几何意义

点积:一个向量在另一个向量的投影长度乘以另一个向量的长度。当向量夹角小于90度时,为正;90度时为0;大于90度时,为负。

叉积:垂直于两个向量的向量,向量长度是两个向量为边的平行四边形的面积。

https://www.bilibili.com/video/BV1BT4y157Sa

视频直观地感受一下。

在Unity中,向量点积可以使用Vector3.Dot(Vector3,Vector3):float来计算;叉积可以使用Vector3.Cross(Vector3,Vector3):Vector3来计算。

Active Object激活对象

gameObject.SetActive(true);

停用对象后,对象消失,在Hierarchy中呈灰色。

如果停用对象的父对象,则父对象、子对象都消失。此时myObject.activeSelf返回True,myObject.activeInHierarchy返回False。

enable和active的区别

active是针对对象的,enable是针对组件的(例如对象身上的光组件)。

active、enable和destroy的区别

个人理解active、enable设为false后,该对象、组件还能被重新设为true并显示;Destroy(xxx)后,则被销毁了。

Destroy(gameObject, 1.5f)意为在1.5秒后销毁对象。

Instantiate

Instantiate用于创建Prefab的克隆体。可以设置放置位置、角度。如果想要对其施加力,可以如下方法:

            Rigidbody rocketInstance;
            rocketInstance = Instantiate(rocketPrefab, barrelEnd.position, barrelEnd.rotation) as Rigidbody;
            rocketInstance.AddForce(barrelEnd.forward * 5000);

Invoke、InvokeRepeating

Invoke作用是多少秒后调用某个方法,InvokeRepeating作用是在Invoke基础上,间隔多少秒调一次。

调用方法如下:

Invoke ("SpawnObject", 2);

InvokeRepeating("SpawnObject", 2, 1);  // 2秒后调用,并每隔1秒重复调用

void SpawnObject()
{
    float x = Random.Range(-2.0f, 2.0f);
    float z = Random.Range(-2.0f, 2.0f);
    Instantiate(target, new Vector3(x, 2, z), Quaternion.identity);
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注