Unity小记二
Unity小记二
前言:
本篇文章是记录我在使用Unity中的过程中遇到并解决的问题和发现的知识点。所以文章比较杂碎。但我本来就是想这样才把这种文章归成随笔的。我使用的Unity版本为2019.4.6f1。
关于碰撞器
纵使是触发器也要有刚体才可以检测。所以碰撞检测必须要有一方有刚体。但是如果你将isKinematic设置为true。则脚本中的OnCollision型的函数都不再其作用,而OnTrigger类型的都可以。
Unity模拟碰撞器,如果你不在指定旋转那么其旋转会参考世界坐标。等于说你放了一个欧姆角为Vector.Zero的碰撞器。
RaycastHit中的normal属性可以得到射线接触面的法线。
关于Unity脚本中的this.enable
当脚本的this.enable ==
false时,这个脚本就不在运行了。所以FixUpdate也会受到this.enable的影响。
unity中物体的transform.forward可以用transform.rotation*Vector.forward。其他的方向也是同理。
...
关于Unity的StreamingAssets
关于Unity的特殊文件夹——StreamingAssets
介绍
StreamingAssets文件是Unity的特殊文件之一。在Unity进行打包操作的时候,StreamingAsset文件不会像Resource文件一样被Unity进行压缩。所以一般而言,StreamingAssets用来存储一些你不想被Unity压缩的文件,比如游戏场景中的敌人的配置信息、UI的配置信息。StreamingAssets文件和Resources文件一样,他们都只能读而不能写。实际上,StreamingAssets文件在一些平台上仍然可以修改。可它的确在一些平台中不可修改。故为了平台之间的兼容性,StreamingAssets下的文件最好不要修改。
关于StreamingAssets的位置
在不同的平台中,游戏文件的存放位置也是不同的。而StreamingAssets文件不像Resources文件一样可以使用Unity提供的Resources
API进行直接的读取操作。我们要首先知道StreamingAssets在不同平台下的位置。这个位置可能会随时间的变化而改变,所以你可以点击 ...
2022-3-10最近的小结
对于公司
现在已经3月份了,我也成功入职了一家公司并且对现在所在的公司有了一定程度的了解。如果有人问我是否喜欢这个公司,我也回答不上来。因为我对这家公司的感觉很是复杂。
但我还记得一开始进去的时候我应该是不喜欢的。因为这家公司一共就5个人(包括我)。这么小的一家公司,我真的喜欢不起来。让我更加讨厌的是公司做得大多数手机中随处可以刷到的广告游戏。比如开局一个人然后通过选择不同的人来增加人数什么的,又或是跑酷类的游戏。反正这样的游戏我喜欢不起来而且我认为这样也不能让我有所增长。
我还记得我经过了一星期的开发后还喜欢上了这家公司。其实我喜欢的理由很简单那就是公司的上班时间和公司的人。公司上班时间是早上10点到晚上7点。对于我这种有早上起不来的人且做事又磨蹭的人来说,早上10点上班太爽了。这就意味着我可以晚睡晚起。而且公司离我的出租屋也就只有10分钟的路程。我可以一直磨蹭到9点50分出门还不会迟到。公司的氛围又不错。所以那段时间我突然觉得这家公司或许还不错。
我对这家公司的态度之所以变成现在这样。其实还是因为这家公司太小和我对未来的迷茫。虽然这好像是两件事,但是 ...
Unity的小记
今日的愚蠢
最近我都在使用unity的射线检测。可是我每次的使用都会有bug。在万般无奈之下,我只能使用平替。今天难得有空,我就将这个问题好好想了一番。当我明白自己的问题所在时,我感觉到了一份愚蠢。
射线检测函数有着许多的重载。参数Vector3
origin是决定射线起始的位置。参数Vector3
direction是表示射线从origin位置然后沿这指定的direction发射。参数float
maxDistance表示这射线长度。参数int
layerMask表示射线只会判断这个layer。而我在使用的时候将放置maxDistance的地方放了layerMask。这就是我最近出bug的原因。今天要不是我朋友帮我找到,我想可能我还要花上几个小时去寻找。
今日的收获
今日我也算有点收获。朋友突然说了关于Unity的layer问题。Unity的中的layer层是按二进制位来存储的。因为int只有32位,所以Unity中的layer只能设置32个。比如当我们定义了一个layer名叫“First”,然后在Unity的第8个layer上。当我们使用LayerM ...
22.2.21最近的小结
最近我一直在面试,笔试。我在此过程中确实也清楚了自己的实力。计算机操作系统,计算机网络和数据结构,这真的是程序员绕不开的三座大山。对于操作系统,我基本都忘了差不多了。虽然最近我有进行复习,但是时间太短了。我自己都不知道自己复习了什么。我对计算机网络是真的一窍不通。现在想来或许数据结构还是自己最了解的东西了。对于数据结构一些名词,我倒是会知道其大概样子。难倒我的是对数据结构中专业名词的解释。回想起大二时我计组答辩时,计组老师对我说过:“你的说法是没错。可是你学了一学期的计算机组成原理,你就一个专业名词没有记住?”。其实当时的我并不是没有记住专业名词,而是我认为我能说出来说明白就好了。而且当时的我认为所谓专业名词和其释义就是懂得人自然懂,不懂的人还不如听大白话。现在想来,我太狂妄了。
今天我还算有了一份offer。我也只有这一份,所以我写完这份小结后就去签这一份offer了。其实我现在不签的原因是我想等另外一家的offer。对于现在给我发offer的公司,我听在此公司的朋友说:这里并不能给我很大的成长,只能说稳固我的技术。让我熟系一下开发的业务逻辑。我更想学习一些开发的流程、 ...
Unity面试(2022.2.17 - 18)
(废话)
本来昨天的面试应该在写一篇文章做一个总结的。可惜啊,我并没有做。不然今天的二面可能通过的几率就大了。太离谱了,为什么两次面试会考同样的题目啊。难道是为了测试我的学习态度?可是我也不是每一天都有空去针对的复习啊。唉,算了。我菜就是菜了,菜才是一切悲哀的源头。
以下都是本人的面试记录。答案都是从我自己的认知和我在网上找到的答案。如果你觉得我的答案不好你也可以去网上找一份
面试记录2022.2.17
1.你做得项目里面有用到什么框架吗?
答:按自己项目来回答
这种问题按照自己做过的项目来就好了。如果没有就准备一下。我倒是没有用到什么框架的,所以我随便扯了一下。如果你也没有那记得面试的时候准备一下编的好一点。
2.协程的原理
答:Unity中协程的实现原理其实就是C#中的迭代器原理。协程有两个函数Current和MoveNext。满足MoveNext条件时才可以访问Current。
协程的原理在很多Unity面试的地方都有提到了。
3.协程的应用
答:场景过渡、网络加载和时间计算。
4.C#提供的数据结构中哪个是用二叉树进行实现的
这题我不会。
5. ...
笔试(乐言2022.2.11)
前言
笔试结果应该是挂了。这也没什么好说的。只能怪自己太傻逼了。唉。但是感觉要是就这样心里总是感觉很不愉快。所以我就写一下了这文章了感慨一下了。事先说明,本人使用的C#语言。文章中的代码部分都是C#。
第一题 程序填空题
阅读下列程序说明和
C#程序,将应填入__(n)__处的字句写在答题纸的对应栏内。
【程序说明】
应用计算机处理日常事务或者是编写程序的时候,经常需要用到带有通配符的字符串匹配。比如:linux命令行下输入,ls
.txt
就是列出当前目录下所有的结尾是.txt的文件。下面一段函数实现了带有\(和*两种通配符的字符串的匹配功能。其中:\)表示长度大于0的数字串,表示任意长度的字符串。要求:按照自己对于算法的理解填写该函数的5个空白。
请注意:必须是完全匹配才能返回true,比如1.txt, a.txt可以匹配*.txt,
2.tx或者
2.txta不能匹配*.txt。函数的参数与返回值的说明请参见函数的注释。
// 功能描述:
表达式是否匹配成功, $表示长度大于 0 的数字串,*表示任意长的字符串
// 输入参数:
字符串 rul ...
C#中用其他类给所需类扩展方法
C#中使用其他类给所需类扩展方法
有时候我们会觉得C#某些类中的一些方法不满足我们的需求,但因此多开一个新类调用时又有些分割感。而这样的方法又会在许多的地方用到,所以单独作为函数又增加了代码的复杂度。那么我们就可以使用扩展方法使得这个类中出现符合我们需求的方法。虽然这仍然要多加新的类,但是调用这个方法时却是使用原先的类。这样会减少一份‘分割感’让我们使用起来更加的方便。
扩展方法的代码入下:
12345678910public static ClassName{ //T表示你要扩展的类名。 //实例中是有返回值的,如果你无需返回值那么可以改为void //param表示参数,这个可以为空即括号中可为(this T),this T不能丢 public static T FunName(this T,param) { return default(T); }}
快速幂模板
关于快速幂算法
所谓的快速幂算法就是进行快速幂运算的算法。它的思想可以看做是将一个幂运算拆分两个指数只差一的幂运算。
例如n的2m次方,我们就拆成两个n的m次方。而n的2m+1次方,我们就拆成n的m次方和n的m+1次方。所以快速幂的时间复杂是O(log)。
上面的思想我觉得比较容易去理解。快速幂还有一种解释。(其实和上面得差不多。但是如果要用非递归的思想去写模板的话那上面的想法就难实现了。)
我们将所要进行幂运算的指数变为二进制形式。然后我们再用二进制转为十进制的思想进行幂运算。这里我就举一个具体的指数吧。n的13和18次方。13的二进制数为:(1101)。18的二进制数为(10010)。那么将(1101)变为13要进行下面的运算:20*1+21*0+22*1+23*1。即1+4+8,那么我们就可以把n的13次方看做是n*n4*n8(这里的指数也很特殊)。18也是一样的想法你可以自己转换一下。那对于我们来说我们只要每次判断指数二进制数中每位的数并让n每次都和自己相乘,当判断到其数为1的时候就将我们所要返回的数乘上此时的n就可以了。那么其时间复杂度也是O( ...
计算机网络-tcp的拥塞控制
TCP的拥塞控制方法
前言:TCP的拥塞控制方法有:慢开始,拥塞避免,快重传和快恢复。这是我在考试后进行的一次整理,如果有错的话也请指出。(主要是我做错了,难受)
1.慢开始
主机刚刚开始发送报文段时,可先设置拥塞窗口
cwnd=1(即设置为1个最大报文段MSS的数值),在每收到一个对新的报文段的确认后,将拥塞窗口加
1,即增加一个 MSS
的数值(重传的不算在内)。使用慢开始算法后,每经过一个传输轮次,拥塞窗口
cwnd 就加倍。一个传输轮次所经历的时间其实就是往返时间
RTT。“传输轮次”更加强调:把拥塞窗口
cwnd
所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。为防止拥塞窗口增加过大引起网络拥塞,还需要设置一个“慢开始门限(ssthresh)”
2.拥塞避免
拥塞避免:让拥塞窗口 cwnd
缓慢地增大,即每经过一个往返时间 RTT
就把发送方的拥塞窗口 cwnd 加 1,而不是加倍,使拥塞窗口
cwnd 按线性规律缓慢增长。
慢开始和拥塞避免按照下面的规则进行使用:
当 cwnd < ssthr ...