C#初级编程

Awake和Start的区别

首先, Awake()会在Start()之前被调用。

其次,Awake()是在脚本对象实例化时被调用的,在应用程序启动前使用Awake来初始化变量或状态。 ,而Start()是在对象的第一帧时被调用的,而且是在Update()之前。

还有, 如果取消激活脚本,Awake仍然会调用,但Start不会。(如果GameObject没有激活则两个都不会调用。) 两个函数都只会调用一次,即使取消激活再重新激活也不会多执行一次。

最后, 初始化放在Awake会更为保险。原因在于,例如A和B两个脚本的start函数中需要引用对方的变量。而假设B脚本中的变量b如果在Start进行初始化,那么A脚本的Start函数获取B脚本中的变量b,得到可能是未初始化的,那么可能引发空引用的错误。

Transform和Rotate的方法

if(Input.GetKey(KeyCode.UpArrow))
    transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);

transform:speed乘以Time.deltaTime可以使得它以每秒走多少米而不是每帧走多少米。

if(Input.GetKey(KeyCode.RightArrow))
    transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);

rotate表示以某个轴为中心进行旋转 。

线性插值

在制作游戏时,有时可以在两个值之间进行线性插值。这是通过 Lerp 函数来完成的。线性插值会在两个给定值之间找到某个百分比的值。例如,我们可以在数字 3 和 5 之间按 50% 进行线性插值以得到数字 4。这是因为 4 是 3 和 5 之间距离的 50%。

// 在此示例中,result = 4
float result = Mathf.Lerp (3f, 5f, 0.5f);

Mathf.Lerp 函数接受 3 个 float 参数:一个 float 参数表示要进行插值的起始值,另一个 float 参数表示要进行插值的结束值,最后一个 float 参数表示要进行插值的距离。在此示例中,插值为 0.5,表示 50%。如果为 0,则函数将返回“from”值;如果为 1,则函数将返回“to”值。

Vector3 from = new Vector3 (1f, 2f, 3f);
Vector3 to = new Vector3 (5f, 6f, 7f);
// 此处 result = (4, 5, 6)
Vector3 result = Vector3.Lerp (from, to, 0.75f);

在此示例中,结果为 (4, 5, 6),因为 4 位于 1 到 5 之间的 75% 处,5 位于 2 到 6 之间的 75% 处,而 6 位于 3 到 7 之间的 75% 处。 使用 Color.Lerp 时适用同样的原理。在 Color 结构中,颜色由代表红色、蓝色、绿色和 Alpha 的 4 个 float 参数表示。使用 Lerp 时,与 Mathf.Lerp 和 Vector3.Lerp 一样,这些 float 数值将进行插值。

在某些情况下,可使用 Lerp 函数使值随时间平滑。请考虑以下代码段:

void Update ()
{
    light.intensity = Mathf.Lerp(light.intensity, 8f, 0.5f);
}

如果光的强度从 0 开始,则在第一次更新后,其值将设置为 4。下一帧会将其设置为 6,然后设置为 7,再然后设置为 7.5,依此类推。因此,经过几帧后,光强度将趋向于 8,但随着接近目标,其变化速率将减慢。请注意,这是在若干个帧的过程中发生的。

如果我们不希望与帧率有关,则可以使用以下代码:

void Update ()
{
    light.intensity = Mathf.Lerp(light.intensity, 8f, 0.5f * Time.deltaTime);
}

这意味着强度变化将按每秒而不是每帧发生。 请注意,在对值进行平滑时,通常情况下最好使用 SmoothDamp 函数。仅当您确定想要的效果时,才应使用 Lerp 进行平滑。

Destroy可以用来销毁物体 也可以用来销毁物体上面的组件:

Destroy

Destroy可以用来销毁物体 也可以用来销毁物体上面的组件。

if(Input.GetKey(KeyCode.Space)
{
    Destroy(GetComponent());
}

OnMouseDown

OnMouseDown是个按鼠标之后会进行自动回调。

Invoke

Invoke 函数可用于延迟时间进行方法调用。

void Start()
{
    Invoke ("SpawnObject", 2);
}
    
void SpawnObject()
{
    Instantiate(target, new Vector3(0, 2, 0), Quaternion.identity);
}
​

Invoke可实现在几秒之后,然后按照固定的间隔调用 。

void Start()
{
    InvokeRepeating("SpawnObject", 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);
}

枚举

enum Direction {North, East, South, West};

你可能感兴趣的:(c#,开发语言)