EKsumic的个人博客

本博客主要用于整理知识点并分享,转载请注明出处

移动适配已完成,点击左侧按钮可使用目录

原创 [长期更新]B站UP主简介——2020版本

B站UP主简介——2020版本,最值得关注的UP主系列;新手入站指引 ...

2020-02-06 18:42:58

阅读数  184

评论数 0

原创 2020市面上各大游戏引擎一览

Unity 目前市场份额最大的引擎,适合新手 UnReal4 目前市场上画质比Unity好的引擎,不适合新手 CryEngine 光追++,但致命架构问题,BUG非常多 Lumberyard CryEngine改,无优势,无特点,BUG也没修复完 Xenko 完全开源的引擎,但处于非常原始的状态 Godot 适合做2D的引擎 ...

2020-03-29 02:25:45

阅读数  11

评论数 0

原创 [Blender]ASCII FBX files are not supported如何解决?

很不幸,你不能直接导入ASCII的FBX,但是你可以导入Binary的FBX,所以你需要一个第三方工具——Autodesk FBX Converter(免费) ...

2020-03-28 21:47:31

阅读数  7

评论数 0

演绎 C#高级编程——Reflection反射

反射就像在主程式里面,安装了一个声纳探测器, 在生命周期一开始的时候,就会调用探测器,你的方法执行依赖于声纳反射回来的声波, 这样的做的好处是,当你想更新程序的时候,只需要加dll就行了, 不需要重新编译。 这样,就成了插件式的编程 ...

2020-03-25 17:27:19

阅读数  20

评论数 0

原创 C#高级编程——Attribute特性

在Unity中,当你写 [RequireComponent(typeof(Rigidbody))] 的时候,脚本会为你请求Rigidbody, 一旦这个脚本挂上去, Inspector里面会为你自动增加一个Rigidbody;AttributeUsage()用来定义特性的使用范畴; AttributeTargets.Field 表示能写在字段前面; AttributeTargets.Method 表示能写在方法签名; Inherited=true表示允许继承; AllowMultiple=true表示允许多个特性 ...

2020-03-25 17:14:05

阅读数  15

评论数 0

原创 [Unity]以m_开头的变量为什么在Insepector面板中不显示?

同样的,即使你写public float m_camelCase = 0; 在Inspector中也会变成 Came Case : [Image] 在Unity中,每当你写 [SerializeField] float m_MovingTurnSpeed = 360; 的时候,在Inpector中你将看到 去掉m_+首字母大写的自动补充空格的 如 Moving Turn Speed 这样的显示出来的变量。 是的, Unity为了更友好地显示,只要你使用了m_你就会在实际面板中看不到m ...

2020-03-25 13:16:56

阅读数  21

评论数 0

原创 [Unity]为什么我需要使用[SerializeField] ?它是用来干什么的?

[SerializeField] 你想在面板序列化显示,但不想其它脚本访问它,通常和private连用 [HideInInspector] 你不想在面板中显示,但你想让其它脚本访问它,通常和public连用 注意点: ① [SerializeField]不可用于static变量。 ② [SerializeField]private float m_xx 在Inspector中只会显示xx。 ③ m_开头表示类的成员变量m为member的缩写,这是个习惯问题 ...

2020-03-25 13:14:29

阅读数  22

评论数 0

演绎 [解决方案]C#Winform处理由frm.Refresh()方法造成的屏幕闪烁

对于大多数应用程序,.NET Framework 提供的默认双缓冲将提供最佳效果。默认情况下,标准 Windows 窗体控件是双缓冲的。可以通过两种方法对窗体和所创作的控件启用默认双缓冲 ...

2020-03-20 02:26:41

阅读数  24

评论数 0

原创 C#try和异常

try catch的基本用法就不说了 主要说catch这块, catch里面填的参数,一般是通用异常 比如 DivideByZeroException ex , 但正常会帮你写上Exception ex, Exception 是父类,包含了所有可能的异常, 只要一发生异常,就会执行catch语句。 那肯定有人想问,像IndexOutOfRangeException、 FormatException、OverflowException这些具体的异常 ...

2020-03-19 01:46:32

阅读数  31

评论数 0

原创 C#Lambda表达式

Lambda表达式 ▢ Lambda表达式其实就是一个用来代替委托实例的未命名的方法; 换句话说,它是个方法,它没有名字。 ▢ 编译器会把Lambda表达式转化为以下二者之一:    ▢ 一个委托实例    ▢ 一个表达式树(expression tree),类型是Expression,它表示了可遍历的对象模型中Lambda表达式里面的代码。它允许Lambda表达式延迟到运行时再被解释 ...

2020-03-18 21:50:10

阅读数  28

评论数 0

原创 C#协变、逆变、不变

C#协变、逆变、不变 Covariance 协变 【Code】 可以按F12打开原生C#查看这些接口和类的定义, 可以发现: IEnumerable只作为输出 IList同时作为输入和输出 Action只能输入 于是就有3种说法: Covariance,Contravariance,Invariance Covariance—协变 Contravariance—逆变 Invariance—不变 ...

2020-03-18 03:22:57

阅读数  39

评论数 0

原创 C#泛型约束

C#泛型约束 一般来讲,泛型的类型参数(parameter)可以是任意类型的。 如果只允许使用特定的类型参数(argument),就可以指定约束, 规定: where T:base-class //必须是某个父类的子类 where T:interface //表示T必须是实现了某个接口 where T:class //表示T必须是引用类型 where T:struct //表示T必须是值类型(非空) where T:new() //表示必须有无参构造函数 where U:T //表示U继承于T ...

2020-03-18 01:05:40

阅读数  24

评论数 0

原创 C#Event事件

Event事件 想要了解C#事件,先了解→C#委托 委托通常存在两个角色:广播者和订阅者 订阅者——指的是委托声明 广播者——指的调用委托的方法 可以参考 C#委托(上)的多播, 订阅者可以通过+=和-=来控制监听方法的数量。 这样的操作,被C#简化成了事件, 一方面是为了简化代码,另一方面是为了防止互相干扰。 需要注意的一点: ▢ 事件是一种结构,用于实现广播者/订阅者模型,它只暴露了所需的委托特性的部分子集 ...

2020-03-17 19:10:22

阅读数  31

评论数 0

原创 C#枚举类型

什么是枚举? 枚举是一个特殊的值类型,它可以让你指定一组命名的数值常量。 public enum BorderSide{Left,Right,Top,Bottom} 枚举类型基本上是int且会自动赋值,从0,1,2,3 . . . 也可以是byte: public enum BorderSide:byte{Left,Right,Top,Bottom} 而且还可以指定: public enum BorderSide:byte{Left=1,Right=2,Top=10,Bottom=11} 这种写法等同于 ...

2020-03-17 02:30:52

阅读数  30

评论数 0

原创 C#接口(补充)

Virtual的实现接口成员 ▢ 隐式实现的接口成员默认是sealed。 ▲ 什么是隐式实现的接口成员 [代码] ▢ 如果想要进行重写的话,必须在基类中把成员标记为virtual或者abstract。 [代码] ☆ 其实你不用virtual 、override也能运行,但是子类的这种行为相当于隐藏父类的 ...

2020-03-16 22:07:02

阅读数  39

评论数 0

原创 C#接口

接口 ▢ 接口与class类似,但是它只为其成员提供了规格,而没有提供具体的实现 ▢ 接口里面的成员都是隐式抽象的 ▢ 一个class或struct可以实现多个接口 接口出现的原因 多人协作 接口实例: public interface  IEnumerator {    bool MoveNext();    object Current{get;}    void Reset(); } ▢ 接口的成员都是隐式public的,不可以声明访问修饰符 ▢ 实现接口对它的所有成员进行public的实现 ...

2020-03-16 21:04:32

阅读数  27

评论数 0

原创 C#索引器

C#索引器 ▢ 索引器提供了一种可以访问封装了列表值或字典的class/struct的元素的一种自然的语法 string s="hello"; Console.WriteLine(s[0]); // 'h' Console.WriteLine(s[3]); // 'l' ▢ 语法很像使用数组时用的语法,但是这里的索引参数可以是任何类型的 ▢ 索引器和属性拥有同样的修饰符 ▢ 可以按照下列方式使用null条件操作符 string s=null; Console.WriteLine(s?[0]); ▢ 实现索引器需要定义this属性,并通过中括号指定参数 ...

2020-03-16 03:14:03

阅读数  32

评论数 0

原创 C#sealed关键字、base关键字以及构造函数和继承

sealed关键字 sealed只能写在override前面,其它的成员不能用sealed 可以sealed类本身,就等于sealed类里面所有的virtual函数了 sealed出现的原因其实很简单, 因为不停的继承会产生很多错误, 所以有些类必须封闭, 于是产生了sealed关键字。 初始类并不需要封闭, 只有继承和重写的类才需要sealed。 base关键字 base和this略像,base主要用于: ✦ 从子类访问父类里被重写的函数 ✦ 调用父类的构造函数 ...

2020-03-16 00:43:36

阅读数  38

评论数 0

原创 C#隐藏成员和new关键字

C#隐藏成员 当子类继承父类的时候,在子类中定义一个与父类完全相同的成员,会造成隐藏。 一般这种情况,是偶然的。 即,你写了A类,但过了段时间写了B类继承A类, 但是忘记了A类里面有一个public int Counter成员, 在B里面又定义了一遍, 这种情况,不会报错,但会提示你成员被隐藏 ...

2020-03-15 17:37:37

阅读数  33

评论数 0

原创 C#抽象类

C#抽象类 ✦ 使用abstract声明的类是抽象类 ✦ 抽象类不可以被实例化,只有其具体的子类才可以实例化 ✦ 抽象类可以定义抽象成员 ✦ 抽象成员和virtual成员很像,但是不提供具体的实现。子类必须提供实现,除非子类也是抽象的。抽象类产生的原因 抽象类更像是 提前定义 规则,但是规则的实现 由子类完成。 它本质还是为协同工作提供的素材 ...

2020-03-15 17:16:56

阅读数  30

评论数 0