欢迎光临散文网 会员登陆 & 注册

[Unity中文课堂教程预告片] C#中级编程

2023-05-29 16:28 作者:学虚幻引擎的小王  | 我要投稿

[Unity中文课堂教程预告片] C#中级编程

01 创建属性

  • propety属性命名
  • 大写开头
  • prop 快速创建


创建属性 P1 - 00:22


封装成字段(fields)

作用:更好控制 何时、如何访问

优势:

  1. 可以增加代码
  2. 创建 自动实现的属性 【prop 快速创建】


02 Ternary Operator


三元运算符 P2 - 00:01


message = health > 0 ? "Player is Alive": "Player is Dead";

使用场景:简单的if-else 每个选项也是简单的

03 静态

  • 可以是变量和方法
  • 一处更改,所有更改

使用 static 声明,表示这个属于类,不属于 类的实例


  • 这两个案例,都是用于统计 游戏对象的数量

方法 也可以是静态的

Input.GetButton/Key/Axis 都是静态方法,不用实例化就可以使用

注意:静态方法里要用静态变量

也可以是静态的,如Input class

——————————————————

04 方法重载 Overloading


方法重载 P4 - 00:01


用同一个 函数名 实现不同的功能,如Add int / string

系统操作 3个步骤:精确匹配、最小更改、错误

05 通用 Generics


通用 P5 - 00:01


  • 特征:可以把 类型(type) 当作 参数(parameter) 来传递
  • 作用:在不知道处理的具体数据类型时候 进行编程

GetComponent 就是一个 泛型方法

泛型方法的结构

  • T 是占位符,用T 是习惯
  • 作用:作为基类,供继承
  • 增加限制:where T:后有4种类型

泛型类的结构

06 继承 Inheritance


继承 P6 - 00:02


定义:获得父类的方法和参数

三种修饰符:public、protected、private

  • public:可以被任何类访问
  • private:只能自己访问,子类也访问不了
  • protected:可以被子类访问不能被其他类访问

结构:类名: 父类

继承是 有层级的

Is-a 关系:

构造函数


继承 P6 - 05:10


07 多态 Polymorphism


多态 P7 - 00:04


多态:如何使用多态 (Polymorphism)、向上转换 (Upcasting) 和向下转换 (Downcasting) 在继承的类之间创建强大而动态的功能。

  • 可以让类有不同 态(types)
  • 作用:可以让子类代替父类,叫 派生类(derived class)
  • 创建一个包含所有子类的集合
  • 比如 collider 包含盒子、椭球、网格 碰撞体

> 不是很懂这个部分

08 成员隐藏:如何在派生类中实现基成员的隐藏。

方法:recreating / re-declaring(重声明)

代码:使用 new 来 重声明



成员隐藏 P8 - 01:42


问题:这里说,当集合里有 父类、子类(隐藏了yell方法)那子类调用 yell 是新方法还是父类方法?

09 覆盖:如何用子类的成员覆盖基类的成员。


覆盖 P9 - 00:01


Overriding

  • 定义:子类 修改父类方法
  • 直接写 同名方法,unity 会报错
  • 代码:virtual(父类) 和 override(子)


使用 base.Yell(); 可以调用父类的方法


10 接口:如何创建接口并在类中实现它们。

  • 定义:关于功能的协定(a contract on functionality)
  • 关键字 interface,接口命名 开头有I+大写名+able(非强制性)
  • 公开
  • 优势:使用多个接口,但不能继承多个类,比如 车和墙没有关联,但都可以被破坏,所以使用 IDamageable 接口使用相关功能


11 扩展方法:如何创建、实现和调用扩展方法。


扩展方法 P11 - 00:02


Extension

  • 功能:向类添加功能,不用更改原始类型(比如内置函数)
  • 位置:非泛型、静态类里
  • 区别于静态:使用 this 关键字

使用:扩展的方法,成为原方法的一部分


12 命名空间:如何创建和使用命名空间来组织您的类。

  • 定义:命名空间类似 类的容器,用来组织脚本,即让编辑器建议的类 更有条理
  • 把类放入 命名空间,用命名空间语法包裹

三种方法使用 命名空间的方法

  • 脚本头 using xxxNamespace;
  • 使用 命名空间名.方法
  • 把类放入 命名空间【不建议】,除非也要把方法放入命名空间

13 列表和字典:如何创建和使用列表和字典集合。

  • 泛型集合
  • List:动态大小

使用 Genneric【泛型?】

使用

这里为什么是<BadGuy>?

功能:索引[0], 计数(count),remove,removeat,insert,sort【基于 ICoumarable 接口】

字典:键值对,KVP

> 字典和列表是可以不提前确定 数据量的数据类型


14 协程:如何创建协程并使用它们来实现复杂的行为。

  • 定义:按时间间隔来执行的函数。(a function that is executed in intervals)
  • 配合 yield 使用,有断点,用于表示 用于控制协程的执行流程,并在协程暂停时指定何时恢复执行
  • yield return null;,可以使协程让出当前帧的执行权,让游戏引擎进行下一帧的更新,从而保持游戏的流畅性
  • 优势:不用写 Update,也不用创建任何计时器,就可以写 时间相关的函数

协程和属性结合

公开属性(property)


  • 环境 点击触发协程
  • 物体 协程控制运动

里面有 属性、协程等编程技巧


15 四元数:如何利用四元数系统来管理游戏对象的旋转。

功能:处理旋转的好工具

  • x,y,z,w
  • 管理旋转:欧拉角
  • 问题:欧拉角遵循 万向节锁(gimbal lock),会阻碍增量旋转
  • 措施:使用 四元数
  • 应用
  • Quaternion.LookRotation(Vector3 变量),类似 lookat


  • lerp\ slerp
  • lerp 均匀差值
  • slerp 在曲线上差值,先慢后快


  • 特殊数:Quaternion.inentity() 0,0,0,0,

欧拉角、万向节问题,四元数的解决方案


16 委托: 如何创建和使用委托在脚本中提供复杂的动态功能。

  • 调用多个方法
  • 功能:创建 可靠且复杂的行为(robust and complex behaviors),可看作函数的
  • 一个委托 调用两种方法,动态调用函数
  • 容器,可被传递或像变量一样使用
  • 变量 包含数据
  • 委托 包含函数
  • 代码:关键字 delegate


  • 多播(multicasting):组合使用多个 函数

在委托执行前,执行是否为空的检查,减少报错


17 特性:使用特性可以将其他行为附加到所创建的方法和变量。在本视频中,您将学习属性的格式以及如何使用“Range”和“ExecuteInEditMode”属性。


特性 P17 - 00:02


Attributes

  • 功能:用于附加信息 在方法、变量、类上。
  • [Range]:用来控制变量范围,不影响脚本其他部分


  • [ExecuteInEditMode]:用来让脚本 在未运行场景时就执行,
  • 放在脚本最开头


18 事件:如何使用事件创建动态的“广播”系统。

  • 定义:事件是特殊的委托,用来提醒其他类发生了某个事件。
  • 广播机制
  • 代码:EventManager
  • 使用静态事件
  • 代码:TeleportScript 订阅者
  • 将 Teleport做订阅和退订操作
  • Teleport 也是类似 委托
  • 退订,很重要
  • EventManager 只用管 事件本身和事件触发器
  • TeleportScript 订阅者 不用管其他订阅者
  • 事件 有内在的安全性,委托没有,事件 其他函数只能对事件进行 订阅和退订,委托可以进行覆盖等


——————————————————

委托,包含函数

多广播

Protected 可以在子类获得,不能在其他 地方获得



[Unity中文课堂教程预告片] C#中级编程的评论 (共 条)

分享到微博请遵守国家法律