• 目录

    一、 控制台输出

    1. Debug.Log("String")

    2. Debug.LogWarning("String")

    3. Debug.LogError("String")

    二、 事件函数(生命周期函数)

    1. 赋值顺序

    2. Reset()

    3. Awake()

    4. OnEnable()

    5. Start()

    6. Update()

    7. LateUpdate()

    8. OnDisable()

    9. OnApplicatoinQuit()

    10. OnDestroy()

    三、 游戏物体

    1. 创建方式

    2. 游戏物体的查找和获取

    3. 功能

    四、 组件

    1. 组件的使用与获取

    2. Transform

    五、向量

    1. 静态变量

    2. 构造函数

    3. 成员变量

    4. 公共函数

    5. 静态函数

    6. 控制移动

    六、 输入系统的接口类

    1. 连续检测(移动)

    2. 连续检测(事件)

    3. 间隔检测(事件)

    4. 如果要找键,上官方文档输入Keycode来找

    七、 消息类

    1. 仅发送消息给自己(以及身上的其他MonoBehaviour对象)

    2. 广播消息(向下发,所有子对象包括自己)

    3. 向上发送消息(父对象包含自己)

    八、 动画

    1. 在游戏对象增添Animator动画编辑器就可以加入动画

    2. 脚本

    九、 时间

    1. 脚本

    十、 数学方法

    1. 脚本

    静态变量

    静态函数

    十一、 随机数

    1. 脚本

    静态变量

    静态函数

    十二、 鼠标操作

    1. 脚本

    2. 注意事项

    十三、 协程

    1. 脚本

    2. 作用

    十四、 调用

    1. 脚本

    十五、 刚体

    1. 注意事项

    2. 脚本

    十六、 音频

    1. 注意事项

    2. 脚本

    十七、 碰撞检测

    1. 注意事项

    2. 脚本

    十八、 资源加载

    1. 注意事项

    2. 脚本

    十九、 场景管理

    1. 注意事项

    2. 脚本


    一、 控制台输出

    • 1. Debug.Log("String")

      • 输出字符串
    • 2. Debug.LogWarning("String")

      • 输出警告为字符串内容
    • 3. Debug.LogError("String")

      • 输出报错为字符串内容
  • 二、 事件函数(生命周期函数)

    • 1. 赋值顺序

      • 变量声明并直接赋值>检视面板赋值>Awake>OnEnable>Start>外部赋值
    • 2. Reset()

      • 1.调用情况

        • 在编辑器不调用的情况下运行
      • 2.调用时间、此数和作用
        • 当脚本第一次挂载到对象或者使用Reset命令之后调用
        • 来初始化脚本的各个属性,Reset最常用与在检视面板中提供良好的默认值
    • 3. Awake()

      • 1.调用情况

        • a.在加载场景时初始化包含脚本的激活状态的GameObject时
        • b.GameObject从非激活转变为激活状态
        • c.在初始化使用Instantiate创建的GameObject之后
      • 2.调用时间、此数和作用
        • 在脚本实例的生存期内,Unity 仅调用 Awake 一次。脚本的生存期持续到包含它的场景被卸载为止。
        • Awake 来代替构造函数进行初始化,在Unity这里,组件的初始化不使用构造函数
    • 4. OnEnable()

      • 1.调用情况

        • a.游戏物体被激活
        • b.脚本组件被激活
      • 2.调用时间、此数和作用
        • 每次游戏物体或者脚本被激活都会调用一次

          • 已添加NewBehaviour的GameObject由未激活到已激活的时候,即setActive(true)
          • 脚本由不可用到可用的时候,即enabled=true
        • 重复赋值 变为初始状态
    • 5. Start()

      • 1.调用情况

        • a.游戏物体被激活
        • b.脚本组件被激活
      • 2.调用时间、此数和作用
        • 在脚本实例激活时在第一帧的Update之前被调用
        • 后于Awake执行,方便控制逻辑的前后调用顺序
    • 6. Update()

      • 1.调用情况

        • a.游戏物体被激活
        • b.脚本组件被激活
      • 2.调用时间、此数和作用
        • 每帧调用,是最常用函数,每秒调用60次左右(根据当前电脑的的性能和状态)
        • 实时更新数据,接受输入数据
    • 7. LateUpdate()

      • 1.调用情况

        • a.游戏物体被激活
        • b.脚本组件被激活
      • 2.调用时间、此数和作用
        • LateUpdate在调用所有Update函数后调用,每秒调用60次左右,安排脚本的执行顺序
        • 比如摄像机跟随,一定是人物先移动了,摄像机才会跟随
    • 8. OnDisable()

      • 1.调用情况

        • a.游戏物体被禁用
        • b.脚本组件被禁用
        • c.游戏物体被销毁
      • 2.调用时间、此数和作用
        • 满足调用情况时即时调用一次,用于一些对象的状态重置,资源回收与清理
    • 9. OnApplicatoinQuit()

      • 1.调用情况

        • a.在程序退出之前所有的游戏对象都会调用这个函数
        • b.在编辑器中会在用户终止播放模式时调用
        • c.在网页视图关闭时调用
      • 2.调用时间、此数和作用
        • 满足调用情况时即时调用一次,用于处理一些游戏退出后的逻辑
    • 10. OnDestroy()

      • 1.调用情况

        • a.场景或游戏结束
        • b.停止播放模式将终止应用程序
        • c.在网页视图关闭时调用
        • d.当前脚本被移除
        • e.当前脚本挂载到的游戏物体被删除
      • 2.调用时间、此数和作用
        • 满足调用情况时即时调用一次,用于一些游戏物体的销毁
  • 三、 游戏物体

    • 1. 创建方式

      • a.使用构造函数(声明+实例化) 创建一个空的游戏对象

        • GameObject myGo = new GameObject("MyGameObject");
      • b.根据现有的预制体(游戏物体)资源或者游戏场景已有的游戏物体来实例化
        • GameObject.Instantiate(grisGo);
      • c.使用特别的API创建一些基本的游戏物体类型(原始几何体)
        • GameObject.CreatePrimitive(PrimitiveType.Plane);
    • 2. 游戏物体的查找和获取

      • 当前游戏物体

        • this
        • 当前游戏物体的组件
          • this.script
          • this.gameObject
      • 对其他游戏物体查找(这时游戏物体必须是激活状态)
        • a.通过名称查找

          • GameObject mainCameraGo= GameObject.Find("Main Camera");
          • Debug.Log("mainCamera游戏物体的标签是:" + mainCameraGo.tag);
        • b.通过标签查找
          • GameObject mainCameraGo = GameObject.FindGameObjectWithTag("MainCamera");
          • Debug.Log("mainCamera游戏物体的名字是:" + mainCameraGo.name);
        • c.通过类型查找
          • No2_EventFunction no2_EventFunction= GameObject.FindObjectOfType<No2_EventFunction>();
          • Debug.Log("no2_EventFunction游戏物体的名字是:" + no2_EventFunction.name);
        • d.多数查找与获取
          • GameObject[] enemyGos= GameObject.FindGameObjectsWithTag("Enemy");
          • BoxCollider[] colliders= GameObject.FindObjectsOfType<BoxCollider>();
    • 3. 功能

      • Debug.Log("当前脚本挂载到的游戏物体名称是:"+gameObject.name);
      • GameObject.Instantiate;
        • 实例化游戏对象,预制体实例化
      • GameObject.CreatePrimitive;
        • 创建基本物体
        • var plane : GameObject = GameObject.CreatePrimitive(PrimitiveType.Plane);
      • Debug.Log("当前游戏物体标签是:"+gameObject.tag);
      • Debug.Log("当前游戏物体层级是:"+gameObject.layer);
      • 游戏物体的激活失活
        • Debug.Log("当前游戏物体的状态是:"+gameObject.activeInHierarchy);
        • Debug.Log("当前游戏物体的状态是:" +gameObject.activeSelf);
        • gameObject.SetActive(true);
  • 四、 组件

    • 1. 组件的使用与获取

      • a.组件都是在某一个游戏物体身上挂载的,可以通过游戏物体查找获取之后使用

        • No5_Component no5_Component = gameObject.GetComponent<No5_Component>();
        • No2_EventFunction no2_EventFunction = gameObject.GetComponent<No2_EventFunction>();
        • Debug.Log(no2_EventFunction.attackValue);
          • 获取脚本的值
        • GameObject grisGo = GameObject.Find("Gris");
        • Debug.Log(grisGo.GetComponent<SpriteRenderer>());
        • Debug.Log(enemyGos.GetComponentInChildren<BoxCollider>());
        • Debug.Log(enemyGos.GetComponentsInChildren<BoxCollider>());
        • Debug.Log(enemyGos.GetComponentInParent<BoxCollider>());
      • b.通过其他组件查找
        • SpriteRenderer sr= grisGo.GetComponent<SpriteRenderer>();
        • sr.GetComponent<Transform>();
        • this.GetComponent<Transform>();
    • 2. Transform

      • 成员变量

        • Debug.Log("Gris变换组件所挂载的游戏物体名字是:"+grisTrans.name);
        • Debug.Log("Gris变换组件所挂载的游戏物体引用是:"+grisTrans.gameObject);
        • Debug.Log("Gris下的子对象(指Transform)的个数是:"+grisTrans.childCount);
        • Debug.Log("Gris世界空间中的坐标位置是:"+grisTrans.position);
        • Debug.Log("Gris以四元数形式表示的旋转是:"+grisTrans.rotation);
        • Debug.Log("Gris以欧拉角形式表示的旋转(以度数为单位)是"+grisTrans.eulerAngles);
        • Debug.Log("Gris的父级Transform是:"+grisTrans.parent);
        • Debug.Log("Gris相对于父对象的位置坐标是:"+grisTrans.localPosition);
        • Debug.Log("Gris相对于父对象以四元数形式表示的旋转是:" + grisTrans.localRotation);
        • Debug.Log("Gris相对于父对象以欧拉角形式表示的旋转(以度数为单位)是:" + grisTrans.localEulerAngles);
        • Debug.Log("Gris相对于父对象的变换缩放是:"+grisTrans.localScale);
        • Debug.Log("Gris的自身坐标正前方(Z轴正方向)是:"+grisTrans.forward);
        • Debug.Log("Gris的自身坐标正右方(X轴正方向)是:" + grisTrans.right);
        • Debug.Log("Gris的自身坐标正上方(Y轴正方向)是:" + grisTrans.up);
          • 想用世界坐标的话,就为vecto3r.up
      • 查找
        • Debug.Log("当前脚本挂载的游戏对象下的叫Gris的子对象身上的Transform组件是:"+transform.Find("Gris"));

          • transform就是this.transform
        • Debug.Log("当前脚本挂载的游戏对象下的第一个(0号索引)子对象的Transform引用是:"+transform.GetChild(0));
        • Debug.Log("Gris当前在此父对象同级里所在的索引位置:"+ grisTrans.GetSiblingIndex());
      • 静态方法
        • Transform.Destroy(grisTrans);
        • Transform.Destroy(grisTrans.gameObject);
        • Transform.FindObjectOfType();
        • Transform.Instantiate();
      • 移动
        • grisGo.transform.Translate(Vector2.left*moveSpeed);//自身坐标系
        • grisGo.transform.Translate(-grisGo.transform.right*moveSpeed);//世界坐标系
        • //grisGo.transform.Translate(Vector2.left*moveSpeed,Space.World);
          • //1.第一个参数按世界坐标系移动,第二个参数指定世界坐标系(实际情况按世界坐标系移动)
        • //grisGo.transform.Translate(Vector2.left * moveSpeed, Space.Self);
          • //2.第一个参数按世界坐标系移动,第二个参数指定自身坐标系(实际情况按自身坐标系移动)
        • //grisGo.transform.Translate(-grisGo.transform.right * moveSpeed, Space.World);
          • //3.第一个参数按自身坐标系移动,第二个参数指定世界坐标系(实际情况按自身坐标系移动)
        • //grisGo.transform.Translate(-grisGo.transform.right * moveSpeed, Space.Self);
          • //4.第一个参数按自身坐标系移动,第二个参数指定自身坐标系(实际情况按世界坐标系移动)(一般不使用)
        • 旋转
          • grisGo.transform.Rotate(new Vector3(0,0,1));
          • grisGo.transform.Rotate(Vector3.forward,1);
  • 五、向量

    • 1. 静态变量

      • print(Vector2.down);
      • print(Vector2.up);//Y轴正方向
      • print(Vector2.left);
      • print(Vector2.right);//X轴正方向
      • print(Vector2.one);
      • print(Vector2.zero);
    • 2. 构造函数

      • Vector2 v2 = new Vector2(2, 2);
    • 3. 成员变量

      • print("V2向量的模长是:" + v2.magnitude);
      • print("V2向量的模长的平方是:" + v2.sqrMagnitude);
      • print("V2向量单位化之后是:" + v2.normalized);
      • print("V2向量的XY值分别是:" + v2.x + "," + v2.y);
      • print("V2向量的XY值分别是(使用索引器形式访问):" + v2[0] + "," + v2[1]);
    • 4. 公共函数

      • bool equal = v2.Equals(new Vector2(1, 1));

        • print("V2向量与向量(1,1)是否相等?" + equal);
      • Vector2 v2E = new Vector2(1, 3);
        • bool equalv2E = v2E.Equals(new Vector2(3, 1));

          • print("v2E向量与向量(3,1)是否相等?" + equal);
      • print("V2向量的单位化向量是:" + v2.normalized + "但是V2向量的值还是:" + v2);
      • v2.Set(5, 9);
        • 设置v2的值
      • transform.position = v2;
        • 将自身transform设置为v2的值
        • transform.position.x = 4;//不可以单独赋值某一个值,比如x,这句话会报错
          • 用属性和方法返回的结构体是不能修改其字段的,值属性
          • 直接访问公有的结构体是可以修改其字段的
          • 总结导致这个问题的原因:
            • 1,Transform中的position是属性(换成方法也一样,因为属性的实现本质上还是方法)而不是公有字段
            • 2,position的类型是Vector的,而Vector是Struct类型
            • 3,Struct之间的赋值是拷贝而不是引用
    • 5. 静态函数

      • Debug.Log("从va指向vb方向计算的无符号夹角是:" + Vector2.Angle(va, vb));
      • print("va点与vb点之间的距离是:" + Vector2.Distance(va, vb));
      • print("向量va与向量vb的点积是:" + Vector2.Dot(va, vb));
      • print("向量va和向量vb在各个方向上的最大分量组成的新向量是:" + Vector2.Max(va, vb));
      • print("向量va和向量vb在各个方向上的最小分量组成的新向量是:" + Vector2.Min(va, vb));
      • print("va向vb按照0.5的比例进行线性插值变化之后的结果是" + Vector2.Lerp(va, vb, 0.5f));
        • //具体得到的新向量的结果的计算公式是:a+(b-a)*t
      • print("va向vb按照参数为-1的形式进行(无限制)线性插值变化之后的结果是" + Vector2.LerpUnclamped(va, vb, -1));
      • print("将点va以最大距离不超过maxDistance为移动步频移向vb" + Vector2.MoveTowards(va, vb, maxDistance));
        • float maxDistance = 0.5f;
      • print("va和vb之间的有符号角度(以度为单位,逆时针为正)是" + Vector2.SignedAngle(va, vb));
      • print("vb和va之间的有符号角度(以度为单位,逆时针为正)是" + Vector2.SignedAngle(vb, va));
      • print("va和vb在各个方向上的分量相乘得到的新向量是:" + Vector2.Scale(va, vb));
      • print(Vector2.SmoothDamp(va, vb, ref currentVelocity, 0.1f));
        • 平滑移动,最高速度为currentVelocity,平滑时间为0.1f
        • Vector2 currentVelocity = new Vector2(1, 0);
    • 6. 控制移动

      • grisTrans.position = Vector2.Lerp(grisTrans.position, targetTrans.position, 0.01f);

        • 速度会先快后慢,因为Lerp里边的grisTrans.position会改变
      • grisTrans.position = Vector2.Lerp(grisTrans.position, targetTrans.position, percent);
        • percent += 1 * lerpSpeed * Time.deltaTime;
        • 这两句话之后就匀速了
      • lerp是先快后慢,moveTowards匀速
      • grisTrans.position = Vector2.MoveTowards(grisTrans.position, targetTrans.position, 0.05f);
      • 平滑阻尼
      • grisTrans.position = Vector2.SmoothDamp(grisTrans.position, targetTrans.position, ref currentVelocity, 1);
  • 六、 输入系统的接口类

    • 1. 连续检测(移动)

      • print("当前玩家输入的水平方向的轴值是:" + Input.GetAxis("Horizontal"));
      • print("当前玩家输入的垂直方向的轴值是:" + Input.GetAxis("Vertical"));
      • print("当前玩家输入的水平方向的边界轴值是:" + Input.GetAxisRaw("Horizontal"));
      • print("当前玩家输入的垂直方向的边界轴值是:" + Input.GetAxisRaw("Vertical"));
        • Raw就只会有1,0返回
      • print("当前玩家鼠标水平移动增量是:" + Input.GetAxis("Mouse X"));
      • print("当前玩家鼠标垂直移动增量是:" + Input.GetAxis("Mouse Y"));
    • 2. 连续检测(事件)

      • if (Input.GetButton("Fire1"))

        • print("当前玩家正在使用武器1进行攻击!");

          • 这个是一直按,就一直有事件实现
      • if (Input.GetButton("Fire2"))
        • print("当前玩家正在使用武器2进行攻击!");
      • if (Input.GetButton("RecoverSkill"))
        • print("当前玩家使用了恢复技能回血!");
    • 3. 间隔检测(事件)

      • if (Input.GetButtonDown("Jump"))

        • print("当前玩家按下跳跃键");

          • 按一次,实现一次事件
      • if (Input.GetButtonUp("Squat"))
        • print("当前玩家松开蹲下建");
      • if (Input.GetKeyDown(KeyCode.Q))
        • print("当前玩家按下Q键");
      • if (Input.anyKeyDown)
        • print("当前玩家按下了任意一个按键,游戏开始");
      • if (Input.GetMouseButton(0))
        • print("当前玩家按住鼠标左键");
      • if (Input.GetMouseButtonDown(1))
        • print("当前玩家按下鼠标右键");
      • if (Input.GetMouseButtonUp(2))
        • print("当前玩家抬起鼠标中键(从按下状态松开滚轮)");
    • 4. 如果要找键,上官方文档输入Keycode来找

      • 如果要改变axis里边的值,在unity点击Edit-Project Setting的Input Mannage来查看
      • 如果是ButtonDown,要在Edit的InputManager编写
      • 如果是KeyDown,则可以使用Keycode
  • 七、 消息类

    • 1. 仅发送消息给自己(以及身上的其他MonoBehaviour对象)

      • gameObject.SendMessage("GetMsg");

        • 调用GetMsg这个方法(在自身上或者是其他组件上)
      • SendMessage("GetSrcMsg","Trigger");
        • 调用GetSrcMsg这个方法(带参数的调用)
        • 如果需要多种参数,就自己建立一个类来传递
      • SendMessage("GetTestMsg",SendMessageOptions.DontRequireReceiver);
        • 如果没有这个方法,就会报错,这个设置了不报错
    • 2. 广播消息(向下发,所有子对象包括自己)

      • BroadcastMessage("GetMsg");
    • 3. 向上发送消息(父对象包含自己)

      • SendMessageUpwards("GetMsg");
  • 八、 动画

    • 1. 在游戏对象增添Animator动画编辑器就可以加入动画

      • 选中一系列图片,拖动进入游戏对象,会自动生成动画
      • 在动画编辑器里边的Parameter添加不同种类的参数使用
      • 对着动画右键MakeTransition,可以添加动画过渡
        • 可以再检视面板调整动画过渡时间
    • 2. 脚本

      • 调整动画速度

        • animator.speed = 0.3f;
      • 播放动画
        • animator.Play("Run");
      • 设置动画编辑器的参数
        • animator.SetFloat("Speed", 1);
        • animator.SetBool("Dead", false);
        • animator.SetInteger("HP", 100);
      • 获取动画编辑器参数的数值
        • print("当前速度参数的值是:" + animator.GetFloat("Speed"));
      • 以标准单位化时间进行淡入淡出效果来播放动画
        • animator.CrossFade("Run", 0.5f);
      • 以秒为单位进行淡入淡出效果来播放动画
        • animator.CrossFadeInFixedTime("Run", 0.5f);
      • 将速度值设置为横向轴的变换
        • animator.SetFloat("Speed",Input.GetAxisRaw("Horizontal"));
  • 九、 时间

    • 1. 脚本

      • print(Time.deltaTime + ",完成上一帧所用的时间(以秒为单位)");
      • print(Time.fixedDeltaTime + ",执行物理或者其他固定帧率更新的时间间隔");
      • print(Time.fixedTime + ",自游戏启动以来的总时间(以物理或者其他固定帧率更新的时间间隔累计计算的)");
      • print(Time.time + ",游戏开始以来的总时间");
      • print(Time.realtimeSinceStartup + ",游戏开始以来的实际时间");
      • print(Time.smoothDeltaTime + ",经过平滑处理的Time.deltaTime的时间");
      • print(Time.timeScale + ",时间流逝的标度,可以用来慢放动作");
      • print(Time.timeSinceLevelLoad + ",自加载上一个关卡以来的时间");
  • 十、 数学方法

    • 1. 脚本

      • 静态变量

        • print(Mathf.Deg2Rad + ",度到弧度换算常量");
        • print(Mathf.Rad2Deg + ",弧度到度换算常量");
        • print(Mathf.Infinity + "正无穷大的表示形式");
        • print(Mathf.NegativeInfinity + "负无穷大的表示形式");
        • print(Mathf.PI);
      • 静态函数

        • print(Mathf.Abs(-1.2f) + ",-1.2的绝对值");
        • print(Mathf.Acos(1) + ",1(以弧度为单位)的反余弦");
        • print(Mathf.Floor(2.74f) + ",小于或等于2.74的最大整数");
        • print(Mathf.FloorToInt(2.74f) + ",小于或等于2.74的最大整数");
        • print(Mathf.Lerp(1, 2, 0.5f) + ",a和b按参数t进行线性插值");
          • a+(b-a)*t
        • print(Mathf.LerpUnclamped(1, 2, -0.5f) + ",a和b按参数t进行线性插值");
        • print("游戏倒计时:" + endTime);
          • endTime = Mathf.MoveTowards(endTime,0,0.1f);
  • 十一、 随机数

    • 1. 脚本

      • 静态变量

        • print(Random.rotation + ",随机出的旋转数是(以四元数形式表示)");
        • print(Random.rotation.eulerAngles + ",四元数转换成欧拉角");
        • print(Quaternion.Euler(Random.rotation.eulerAngles) + ",欧拉角转四元数");
        • print(Random.value + ",随机出[0,1]之间的浮点数");
        • print(Random.insideUnitCircle + ",在(-1,-1)~(1,1)范围内随机生成的一个vector2");
          • 在圆中随机生成一个目标
      • 静态函数

        • print(Random.Range(0,4)+",在区间[0,4)(整形重载包含左Min,不包含右Max)产生的随机数");
        • print(Random.Range(0, 4f) + ",在区间[0,4)(浮点形重载包含左Min,包含右Max)产生的随机数");
        • Random.InitState(1);
          • print(Random.state+",当前随机数生成器的状态");

            • 这个可以看版本数
          • 伪随机数
          • 设置随机数状态,在其他机器也能生成一样的数,版本为1
        • print(Random.Range(0,4f)+",设置完随机数状态之后在[0,4]区间内生成的随机数");
  • 十二、 鼠标操作

    • 1. 脚本

      • private void OnMouseDown()

        • print("在Gris身上按下了鼠标");
      • print("鼠标在Gris身上松开了");
        • private void OnMouseUpAsButton()
      • print("鼠标悬停在了Gris上方");
        • private void OnMouseOver()
      • private void OnMouseExit()
        • print("鼠标移出了Gris");
      • print("鼠标移入了Gris");
        • private void OnMouseEnter()
      • print("在Gris身上用鼠标进行了拖拽操作");
        • private void OnMouseDrag()
      • private void OnMouseUp()
        • print("在Gris身上按下的鼠标抬起了");
    • 2. 注意事项

      • 需要对游戏对象添加碰撞器,collider才能检测到鼠标点动
  • 十三、 协程

    • 1. 脚本

      • 协程的启动

        • StartCoroutine("ChangeState");
        • StartCoroutine(ChangeState());
        • IEnumerator ie = ChangeState();
        • StartCoroutine(ie);
      • 协程的停止
        • StopCoroutine("ChangeState");
        • StopCoroutine(ie);
      • 无法停止协程
        • StopCoroutine(ChangeState());

          • 因为没有把协同对象传递过来
      • StopAllCoroutines();
        • 关闭所有协同
      • StartCoroutine("CreateGris");
      • IEnumerator协程方法编写
        • yield return new WaitForSeconds(2);

          • 停止两秒再用
        • yield return null;
          • 等待一帧 yield return n(n是任意数字)
        • yield return new WaitForEndOfFrame();
          • 在本帧帧末执行以下逻辑
        • yield break;
          • 跳出方法,类似break
      • 小知识
        • Instantiate(animator.gameObject);

          • 可以通过组件去定位到自身的游戏对象
    • 2. 作用

      • 1.延时调用,2.和其他逻辑一起协同执行
      • (比如一些很耗时的工作,在这个协程中执行异步操作,比如下载文件,加载文件等)
  • 十四、 调用

    • 1. 脚本

      • Invoke("CreateGris",3);

        • 停止3S后调用这个方法
      • InvokeRepeating("CreateGris",1,1);
        • 重复调用

          • 第二个是停止时间
          • 第三个是重复速率
      • CancelInvoke("CreateGris");
        • //停止
        • CancelInvoke();
          • 所有调用停止
      • IsInvoking("CreateGris")
        • 是否有Invoke调用了
    • 作用
      • 延时调用方法
  • 十五、 刚体

    • 1. 注意事项

      • 一般物理系统代码放进FixedUpdate里边
      • 可以调整mass来调整物体质量
    • 2. 脚本

      • print(rb.gravityScale+",该对象受重力影响的程度");

        • rb.gravityScale = 0;

          • 这样就不受重力影响
      • //rb.AddForce(Vector2.right*10);
        • //rb.AddForce(Vector2.right * 10,ForceMode2D.Impulse);

          • 第二个是施加力的方式
      • rb.velocity = Vector2.right *moveSpeed;
      • rb.MovePosition(rb.position+Vector2.right*moveSpeed*Time.fixedDeltaTime);
        • 根据速度移动
      • rb.MoveRotation(rb.rotation+angle*Time.fixedDeltaTime);
        • 根据角度旋转
        • //rb.MoveRotation(90);
  • 十六、 音频

    • 1. 注意事项

      • 组件为AudioSource
      • AudioClip可以选择剪辑好的音频
      • loop循环
      • 设置一个状态字段,这样就能知道目前状态然后进行更改
        • 先设置状态字段,State,有个默认值
        • 然后想更改状态之后,查看状态字段目前的值,取反,并且赋予字段
        • 每一次都能知道状态值是啥了
    • 2. 脚本

      • private AudioSource audioSource = GetComponent<AudioSource>();

        • 音频获取组件
      • audioSource.clip = musicClip;
        • 设置音频文件
        • musicClip为AudioClip类
      • audioSource.Play();
        • 播放音频
      • audioSource.volume = 1;
        • 设置音量
      • audioSource.time = 3;
        • 设置起始时间
      • 禁音
        • private bool muteState;

          • 设置字段,设置初始值
        • audioSource.mute = muteState;
          • 根据状态赋值
          • muteState = !muteState;
            • 更改下一次状态值
      • audioSource.Pause();
        • 暂停

          • 暂停只是在那个时间停止
      • audioSource.UnPause();
        • 取消暂停
      • audioSource.Stop();
        • 停止
      • AudioSource.PlayClipAtPoint(soundClip,transform.position);
        • 在position点生成一个点声源播放一次
        • 循环用的话,就循环生成点声源
      • audioSource.PlayOneShot(soundClip);
        • 播放一次
  • 十七、 碰撞检测

    • 1. 注意事项

      • 一方有刚体且要运动
      • 双方要有碰撞体
      • 点击触发器就不会发生受力现象Triggle
    • 2. 脚本

      • private void OnCollisionEnter2D(Collision2D collision)

        • private void OnTriggerEnter2D(Collider2D collision)

          • Debug.Log(collision.gameObject.name);

            • 碰撞到的游戏物体名字
        • private void OnCollisionStay2D(Collision2D collision)
          • Debug.Log("在碰撞器里");
        • private void OnCollisionExit2D(Collision2D collision)
          • Debug.Log("从碰撞器里移出");
        • private void OnTriggerStay2D(Collider2D collision)
          • Debug.Log("在触发器里");
          • 需要把IsTriggle设置为True
        • private void OnTriggerExit2D(Collider2D collision)
          • Debug.Log("从触发器里移出");
  • 十八、 资源加载

    • 1. 注意事项

      • 添加一个Resources文件夹放文件就方便加载了,无需吧文件路径再写进去了

        • 文件夹名称一定要对
    • 2. 脚本

      • AudioClip audioClip = Resources.Load<AudioClip>("sound");

        • 加载音频脚本
        • AudioSource.PlayClipAtPoint(audioClip, transform.position);
          • 可以进行播放
        • AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("sound"), transform.position);
          • 只播放一次的话可以这么写
      • Instantiate(Resources.Load<GameObject>(@"Prefabs/GrisCollierTest"));
        • 通过文件路径进行加载
        • 默认也是从Resources文件夹开始
      • Object obj = Resources.Load("sound");
        • 通过obj来取
      • AudioClip ac = obj as AudioClip;
        • as的作用是如果转换不了就返回null
      • AudioClip ac = (AudioClip)obj;
        • 这样转换不了就会报错
      • AudioSource.PlayClipAtPoint(ac, transform.position);
      • Resources.LoadAll<AudioClip>("Prefabs");
        • 加载所有Prefabs文件夹的音频文件
      • AudioClip[] audioClips = Resources.LoadAll<AudioClip>("");
        • 加载此文件夹下的所有音频文件
      • foreach (var item in audioClips)
        • Debug.Log(item);
        • 可以通过foreach调用
      • Resources.UnloadAsset
        • 资源释放,一般不用因为C#有垃圾回收
  • 十九、 场景管理

    • 1. 注意事项

      • 切换场景之前需要把Sence放到File-BuildSetting里边才能进行加载
    • 2. 脚本

      • SceneManager.LoadScene(1);

        • 通过序号加载场景
      • SceneManager.LoadScene("TriggerTest");
        • 通过名称来加载场景
      • SceneManager.LoadSceneAsync(2);
        • 异步加载

          • 可以不妨碍当前场景的运动
        • private AsyncOperation ao;
          • 通过异步加载器可以进行控制
          • ao.allowSceneActivation = false;
            • 设置加载完毕后不激活场景
          • ao.progress
            • 可以获取异步加载过程,一般大于0.9f就可以转换场景了

              思维导图

第三章 Unity基础之API相关推荐

  1. rgb颜色查询工具_《我的眼睛–图灵识别》第三章:基础:颜色识别

    <我的眼睛–图灵识别>第三章:基础:颜色识别 七色彩虹 漂亮的彩虹是一种光学现象,使用三棱透镜进行折射就能看到七色彩虹.它分别由红.橙.黄.绿.青.蓝.紫7种颜色组成.色彩按字面含义上理解 ...

  2. Unity 面试题汇总(三)Unity 基础相关

    Unity 面试题汇总(三)Unity 基础相关 目录 Unity 面试题汇总(三)Unity 基础相关 0.FSM(状态机).HFSM(分层状态机).BT(行为树)的区别 1.什么是协同程序? 2. ...

  3. 【面试宝典】软件测试工程师2021烫手精华版(第三章Mysql基础篇)

    第三章 Mysql 基础 一. 基础知识 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库 什么是关系型数据库,主键,外键,索引分别是什么? 关系型数据库是由多张能 ...

  4. 《我的眼睛--图灵识别》第三章:基础:颜色识别

    <我的眼睛–图灵识别>第三章:基础:颜色识别 七色彩虹 漂亮的彩虹是一种光学现象,使用三棱透镜进行折射就能看到七色彩虹.它分别由红.橙.黄.绿.青.蓝.紫7种颜色组成.色彩按字面含义上理解 ...

  5. 第三章网络安全基础考试要点及真题分布

    第三章网络安全基础 1.计算机网络基本知识 2.网络安全的基本概念 3.网络安全威胁 4.网络安全防御 5.无线网络安全

  6. 高新计算机office2010考试题库,注意!注意!计算机等级考试题库来啦:一级MS Office第三章“Word2010基础”...

    小编所收集到的相关计算机等级考试题库:一级MS Office第三章"Word2010基础"的资料 大家要认真阅读哦! 启动Word 启动Word的常用方法有下列两种: 1.常规方法 ...

  7. 计算机基础98均9,第三章 计算机基础 Windows98 (第二讲).ppt

    <第三章 计算机基础 Windows98 (第二讲).ppt>由会员分享,可在线阅读,更多相关<第三章 计算机基础 Windows98 (第二讲).ppt(26页珍藏版)>请在 ...

  8. 自动柜员机是不是微型计算机,第三章微型计算机基础知识.pptx

    文档介绍: 问题的提出: 计算机不仅被用于计算购物账单或从自动柜员机取款,还可帮助作 家.历史学家.音乐家.诗人.教师.电视节目制作人.图像工作者等 完成他们的工作.计算机为什么具有如此大的灵活性呢? ...

  9. 软考 程序员教程-第三章 数据库基础知识

    软考 程序员教程-第三章 数据库基础知识 第三章 数据库基础知识 3.1 基本概念 数据库系统(DataBase System,DBS)由数据库(DataBase,DB).硬件.软件和人员4大部分组成 ...

  10. 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第三章 Wi-Fi基础知识

    首先感谢各位兄弟姐妹们的耐心等待.本书预计在3月中旬上市发售.从今天开始,我将在博客中连载此书的一些内容.注意,此处连载的是未经出版社编辑的原始稿件,所以样子会有些非专业. 注意,如下是本章目录,本文 ...

最新文章

  1. Kubernetes删除一直处于Terminating状态的namespace
  2. js 检测浏览器,呈现引擎和平台
  3. ping 不通 华为三层交换机vlan_华为三层交换机如何让VLAN间不能互通配置精编版...
  4. SpringBoot 中使用 @Valid 注解 + Exception 全局处理器优雅处理参数验证
  5. mac终端编写c语言,【新手提问】有知道用mac终端编c语言的网络编程的人吗?
  6. 新版仿山楂岛留言PHP源码+短视频/公众号吸粉引流
  7. butterworth matlab,Matlab实现Butterworth滤波器
  8. R语言解决安装rgl包问题:ERROR: compilation failed for package ‘rgl‘
  9. 跳跃游戏Ⅱ(C语言)
  10. photoshop合并图层:向下合并、合并选中层、合并可见图层、拼合图像操作
  11. 再不学点东西我们就老了
  12. [NOI2002]贪吃的九头龙(树形dp)
  13. 老熊一亩三分地里的Oracle工具
  14. Xshell安装与使用
  15. 软技能-代码之外的生存指南 学习笔记
  16. 贵阳CBD造型怪异 或扭曲或变形
  17. 生理期是女孩变美的黄金期
  18. 美工psd转html工具,介绍两款可以将PSD文件生成XHTML+CSS 网页的Photoshop插件
  19. 935.Knight Dialer [JavaScript]
  20. EasyUI Messager的alert基本使用

热门文章

  1. 2021年IEEE Fellow刚刚放榜!84位华人学者当选再创新高!
  2. IK分词器结合ES使用
  3. android 符号表情显示乱码,微信昵称含中文、特殊字符、emoji表情乱码的后台解决方案...
  4. DSP内核结构中的 D L S M
  5. 帝国cms系统使用初级教程一(较全面)
  6. Remarkable简单使用
  7. Destroy销毁物体失败,Can't remove RectTransform because Image (Script) depends on it
  8. 用python爬取链家的租房信息
  9. java 视频 合并成一个_java实现视频分段并且合并 | 学步园
  10. openwrt 使用自定义 DNS