Unity游戏脚本语言(Unity官方教程)笔记

入门

1.Awake()与Start()

两者都会在加载脚本时自动运行

Awake();

在脚本使用前就会被调用,一般处理脚本间的引用和初始化

Start();

一旦脚本组件enabled,就会调用,紧接着会调用Update()

2.Update()与FixedUpdate()

Update();

>每一帧都调用

>用于常规更新:移动非物理对象、简单的计时器、获得输入

>调用的间隔时间当然依赖不同帧的时长

FixedUpdate();

>每一次物理步骤调用

>FixedUpdate 间隔是持续不变的

>用于常规更新如物理刚体对象的调整

3.component.enable = false与gameObject.SetActive(fasle)

4.transform.Translate()与transform.Rotate()

例如:transform.Rotate(Vector3.up, -turnSpeed*Time.deltaTime)

乘以deltaTime是为了控制速度不要太快,每秒执行而不是每帧。注意此方法不能用于碰撞体。

5.transform.LookAt(target)

其中target也是transform

6.Lerp()

newPosition = transform.position;

transform.position = Vector3.Lerp(transform.position, newPosition, Time.deltaTime*smooth);

newIntensity = light.Intensity或者light.color

light.intensity = Mathf.Lerp(light.intensity, newIntensity, Time.detaTime*smooth);

7.Destroy()

Destroy(gameObject, 3f);   Destroy(component, 3f);

8.GetButtonDown, GetButton, GetButtonUp;GetKeyDown, GetKey, GetKeyUp

9.GetComponent非常耗费性能,所以一般放在Awake()里

10.值类型Vector3 pos/ 引用类型Transform tran = transform的区别。

11.初始化一个刚体

Rigidbody roketInstance;

rocketInstance = Instantitate(roketPrefab, barrelEnd.position, barreleEnd.rotation) as Rigidbody;

12.数组

public GameObject[] player;

player = GetObject.FindGameObjectWithTag("Player");

13.调用函数

InvokeRepeating("SpawnObject", delayTime, RepeatTime);

CancelInvoke("SpawnObject");

14.枚举类型

如果其他类要用到该类型,就要把定义放在类外

enum Direction{North = 10, East, South, West}

中级

1.属性 Properties

public int Experience
{
    get
    {
       //Some other code
       return experience;
    }
    set
    {
       experience = value;
    }
}

属性主要区别于公有变量的两点:一是可以省略get或set之一实现只读或只写,二是get和set可以像函数一样放入其他代码。

以经验值、等级为例。

2.三元运算符 Ternary Operator

替代简单的if-else语句。

3.静态 Statics

静态变量与静态方法属于类,而不属于某个对象。可以不实例化对象来使用静态成员。

以敌人数量为例。

4.重载 Overloading

系统决定运行哪个重载方法要做的三件事情:1.Exact Match 2.Least Conversion 3.Error

5.泛型 Generics

可以将类型作为参数传递,允许在不知道使用数据的确切类型时进行编程。

public T GenericMethod<T>(T param) where T :

class /struct   引用类型/值类型

new()    没有参数的公共构造函数

MonoBehaviour  指的是T是这种类,或者是其派生类

IEnumerable T实现了该接口

6.继承 Inheritance

7.多态性 Ploymorphism

8.成员隐藏 Member Hiding

在子类中重新创建父类的成员,一定要在声明前加new

9.重写 Overriding

virtual+override 子类既可以添加功能,又不丢失父类提供的功能。

10.接口 Interfaces

一个类不能继承多个类,但是可以实现多个接口。

public class Avatar : MonoBehaviour, IKillable, IDamagable<float>{}

11.扩展方法 Extension Methods

向类型添加功能的一种方法,而无需创建派生类型或更改原始类型。必须放在非泛型静态类中。

下面以Transform为例

using UnityEngine;
using System.Collections;

public static class ExtensionMethods
{
    //第一个参数前面必须加this,后面的可以不加
    public static void ResetTransfomation(this Transform trans)
    {
        trans.position = Vector3.zero;
        trans.localRotation = Quaternion.identity;
        trans.localScale = new Vector3(1, 1, 1);
    }
}

12.命名空间 Namespaces

三种方法使用命名空间。嵌套命名空间。

13.列表和字典 Lists and Dictionaries

首先要using System.Collection.Generic;

List<BadGuy> badguys = new List<BadGuy>();

创建以及一些重要操作:Add、 Count、 RemoveAt、 Insert

如果实现排序,就要在列表类型定义,前using System,实现IComparable接口,声明public int CompareTo(){}。

Dictionary<string, BadGuy> badguys = new Dictionary<string, BadGuy>();

如果不确定key值是否存在,使用如下类似方法badguys.TryGetValue("birds", out temp)

14.协程 Coroutines

可以看作一个间隔执行的函数

15.四元数 Quaternions

处理旋转的最好方法,永远不要单独改变四元素的一部分

16.委托 Delegates

可以简单的看作函数的容器

delegate void MultiDelegate();
MultiDelegate myMultiDelegate;
...
myMultiDelegate += PowerUp;
myMultiDelegate += TurnRed;
if(myMultiDelegate != null){
   myMultiDelegate();
}

17.特性 Attributes

18.事件 Events

猜你喜欢

转载自blog.csdn.net/qq_27012963/article/details/83621861
今日推荐