深度搜索

组件Component深度搜索

b.GetComponentInChildren<Text>(true).text = name;

这个语句透露两个信息

  • 第一个,可以使用getcompont获取组件,然后直接赋值,等同于
  • boomName = b.GetComponentInChildren<Text>(true);
  • boomName.text= name;

或者

  • b.GetComponentInChildren<Text>(true).text = name;
  • 第二个,深度搜索GetComponentInChildren<true>

特点:

  • 按照子件下标顺序,寻得第一个
  • 按照子到孙的顺序,寻得一个
  • 即便是未被激活的子物体也会被获取

s

场景物体GameObject深度搜索

GameObject.Find可以搜索到任意深度的物体,用在场景里面的搜索

unity 碰撞视图 unity 碰撞体_深度搜索

成功深度搜索

unity 碰撞视图 unity 碰撞体_笔记_02

子物体GameObject深度搜索

unity 碰撞视图 unity 碰撞体_unity 碰撞视图_03

unity 碰撞视图 unity 碰撞体_unity_04

相机跟随

  • 先安装这个插件,右键创建

unity 碰撞视图 unity 碰撞体_笔记_05

  • 拉入跟随对象

unity 碰撞视图 unity 碰撞体_游戏引擎_06

  • 加入限制触发器

unity 碰撞视图 unity 碰撞体_笔记_07

命名空间namespace

  • 将类纳入一个命名空间,当其他类需要调用的时候,需要using导入改命名空间
  • 下图可看出,未导入命名空间将无法调用BoomManager类

协程

协程IEnumerable是接口,有了这个才可以foreach

unity 碰撞视图 unity 碰撞体_笔记_08

IEenumerator也是接口,必须要实现内部抽象方法才能使得继承IEnumerator的类返回成功,继而实现IEnumerable

unity 碰撞视图 unity 碰撞体_unity 碰撞视图_09

返回继承IEnumerator的类 == yield return

unity 碰撞视图 unity 碰撞体_笔记_10

实例化Instantiate注意事项

物体实例化的开始会取不到物体身上的组件

unity 碰撞视图 unity 碰撞体_笔记_11

调用不到b里面的方法或者是rigidbody

所以进入到BulletController中

unity 碰撞视图 unity 碰撞体_unity 碰撞视图_12

在awake中获取到组件

延迟销毁

Destroy(gameObject, 2f);延迟两秒销毁

确定物体类型方法

EnemyController ec = collision.gameObject.GetComponent<EnemyController>();

能创建一个类去接受其他物体中的类,是不是证明

也可以Collision cl = other.getComponent<Collision>

State maine

unity 碰撞视图 unity 碰撞体_unity 碰撞视图_13

unity 碰撞视图 unity 碰撞体_unity_14

unity 碰撞视图 unity 碰撞体_笔记_15

unity 碰撞视图 unity 碰撞体_unity_16

unity 碰撞视图 unity 碰撞体_笔记_17

Unity编辑器小技巧

添加这句话可以使得unity窗口添加一行菜单栏

unity 碰撞视图 unity 碰撞体_unity_18

使用这句话可以在Inspector里面加上一行字

unity 碰撞视图 unity 碰撞体_游戏引擎_19

给Inspector添加注释

unity 碰撞视图 unity 碰撞体_深度搜索_20

使文字背景和文字框自适应文字数量的方法:

将text放在背景的子物体位置

unity 碰撞视图 unity 碰撞体_unity_21

添加下面两个组件,注意打钩的地方

似乎锚点设置也有影响Pivot

unity 碰撞视图 unity 碰撞体_笔记_22

不能引用语句太长否则会处理不到

unity 碰撞视图 unity 碰撞体_深度搜索_23

用OnEnable可以使得函数在每次物体激活的时候调用一次

unity 碰撞视图 unity 碰撞体_深度搜索_24

定义自变量的时候可以加上跟踪链接

这种方法会使得前面的数值会随着后面的数值变化而变化,static不是必须的

unity 碰撞视图 unity 碰撞体_unity_25

nameof可以打印出参数或者函数的名字

unity 碰撞视图 unity 碰撞体_深度搜索_26

[Range(0,1)]面板生成进度条限制输入值

unity 碰撞视图 unity 碰撞体_游戏引擎_27

延迟委托函数

unity 碰撞视图 unity 碰撞体_unity 碰撞视图_28

unity 碰撞视图 unity 碰撞体_深度搜索_29

引用数据之后切不可再次用等号,否则会重新关联引用,但是可以用引用数据的下面数据

贝塞尔曲线

Unity 贝塞尔曲线实现抛物线运动,投掷功能实现 - 知乎

/// <param name="t">0到1的值,0获取曲线的起点,1获得曲线的终点</param>

/// <param name="start">曲线的起始位置</param>

/// <param name="center">决定曲线形状的控制点</param>

/// <param name="end">曲线的终点</param>

public static Vector3 GetBezierPoint(float t, Vector3 start, Vector3 center,Vector3 end) { return (1 - t) * (1 - t) * start + 2 * t * (1 - t) * center + t * t * end; }

  1. string转枚举

unity 碰撞视图 unity 碰撞体_unity_30

差值运算的使用

DOTween动画

unity 碰撞视图 unity 碰撞体_深度搜索_31

协程定时器

unity 碰撞视图 unity 碰撞体_深度搜索_32

位移运算符

unity 碰撞视图 unity 碰撞体_笔记_33

unity编辑器注意事项

不能在物体销毁前调用一些函数,这样会使得这些函数调用失败。

刚刚实例化物体的时候,想要先调用到一某个脚本函数,之后再去调用这个脚本的其他函数的时候,可以吧需要的函数,放在awake里

unity 碰撞视图 unity 碰撞体_unity_34

调用其他函数必然先得发生了awake

射线中的layer Mask

  1. 这个layerMask为二进制,
  2. 而且第六层不是0110,而是100000;
  3. 用layermask.getmask() = 64,100000
  4. 不是layermask.NameToLayer() = 6,0110

这里介绍引入

unity 碰撞视图 unity 碰撞体_unity 碰撞视图_35

layout组件的使用

容器适应子物体大小

 

  • 1.content size fitter

unity 碰撞视图 unity 碰撞体_笔记_36

  • 2.layout element

子物体

unity 碰撞视图 unity 碰撞体_深度搜索_37

选择preferred会首选长宽

父物体

unity 碰撞视图 unity 碰撞体_游戏引擎_38

Image Type图片类型

Simple

Simple类型,顾名思义简单类型,这种类型的image在拉伸过程中,整体会发生均匀形变,并且始终有两个三角面。

Sliced

四个角不会拉伸

Tiled

Tiled是平铺,他会把拉伸部分重复显示,四个角位置除外,在拉伸过程中,也是重复显示的过程

枚举

flag枚举

unity 碰撞视图 unity 碰撞体_深度搜索_39

实例化

MonoBehaviour:引用了该接口的脚本,会自动包含一个base属性,直接new会赋予null

unity 碰撞视图 unity 碰撞体_笔记_40

但是可以索引到其他属性不报错

unity 碰撞视图 unity 碰撞体_游戏引擎_41

==与equals

unity中,==可以代替equals,

==作用

  1. 对比数值
  2. 引用数据的地址

但是string 和enum在unity中可以当做数值去对比;

unity 碰撞视图 unity 碰撞体_游戏引擎_42

位运算符和移位运算符 - 对整数类型中的单个位执行布尔(AND、NOT、OR、XOR)和移位运算 | Microsoft Learn

unity 碰撞视图 unity 碰撞体_游戏引擎_43

用这个方法去关闭某一层;

unity 碰撞视图 unity 碰撞体_深度搜索_44

树冲突

SVN 树冲突解决详解

结构体和类的区别(Struct 和 Class)

unity 碰撞视图 unity 碰撞体_unity 碰撞视图_45

类中的两个字典,存的是struct 和 class

unity 碰撞视图 unity 碰撞体_深度搜索_46

调用字典里面的值

unity 碰撞视图 unity 碰撞体_unity_47

unity 碰撞视图 unity 碰撞体_深度搜索_48

改变两个值,发现只有在class中的数据能够被检测到。

而且struct的值是不能为null的,就和一个普通的数值一样