C#实现优先队列模板
C#实现优先队列模板
C#并不提供优先队列这个API。所以我们要自己去实现C#的优先队列。这里我参考了知乎这位作者的优先队列实现。(不过他用的是C++,我只是单纯的转换为C#而言)文章链接:https://zhuanlan.zhihu.com/p/35314095。具体的方法可以直接去看知乎的文章。我这里就直接给出C#的实现。(这里我根据自己的需求加了一些东西,你们也可以看文章中的代码改造然后根据自己的需求去修改)
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291 ...
22-7-20最近的总结
前言
最近发生了好多事情。本来我计划是一个月一次总结。但是计划总是赶不上变化。上次近况总结还是3月份。但其实直到4月份我依然会更新文章。之所以没有更新总结,还是因为我不觉有什么好更新的。
关于技术
在技术方面,其实我这几个月来技术的增长几乎为0。虽然还是有在学习一些东西,但是这些东西我自己都没有弄明白自然也不会去做一些总结。其实有时候我也想将一些开发中遇到的细碎知识整理起来,但是细碎的知识总结起来还是细碎的知识。我不可能因为突然有一天想起来我有一个知识点忘了但是我在某一篇知识点合集中有写而去一个个翻我的文章。这样我还不如去直接百度,那我自己写文章的意义就没有了。所以我也就没有继续去更新了。
自己的生活
关于生活,这段时间来发生了好多的事情。离上次总结过去了这么久不发生点事情也不太正常。我就挑一些重点的说一下吧。
我和舍友都离职了
舍友比我先离开。他离开的原因很简单,他认为在这个公司他再也学不到新的东西,而且还要忍受老板不断变换的需求。有时候老板的一个更改需求就让他这几天的活全部白干(公司的策略是快速原型开发 ...
Unity Transform扩展(一)
Unity Transform扩展(一)
前言:
在使用Unity的Transform函数时,我们会发现其自身提供的API有时候并不能完全满足我们的需求。因此我们可能会写一些方法去实现我们的需求。但是有时候这个需求在多个不同的类中都需要。这时候我们就要使用一个帮助类去减少我们重复的工作。不过人都是懒惰的,我不希望多声明一个类然后再去使用。那么我们可以使用C#的扩展类方法让Transform直接可以调用我们写的方法。具体实现如下。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354using System.Collections;using System.Collections.Generic;using UnityEngine;public static class TransformHelper{ //通过名字深度优先遍历查找对象 public static Transform FindByNameDFS ...
lua学习笔记整理
Lua 学习笔记整理
前言(废话):
我今年2月份开始进行笔记整理。然后我拖到4月份才整理结束。其实我学完后就再也没有用过了。很多知识点在我整理的时候都有些模糊不清了。但是我真的很少使用lua,而且我又不想自己白学一门知识。所以我在这之中又去查找资料。有些东西不一定正确毕竟我也是在学,但是代码的结果是准确的。最后整理了快七千字已经是我写得最多的文章了。
lua中的数据类型
nil 表示空数据,如同C#中的null
boolean,布尔型。只有true和false。
string,字符类型。
number,数字类型。可以说同C#的float类型,占32位。lua中没有整数类型。
table,表格类型。它是一个关联数组,下标是从1开始的。可以用表示来模拟面向对象。在lua中table有着很重要的作用。
function,函数类型。在lua中函数是第一类值,而在C#、C++或Java等语言中函数是第二类值。
userdata 表示任意存储在变量中的C数据类型。
thread
表示执行的独立线程(本质是“伪多线程”,是协程的概念),用于执行协同程序。
...
如何使用Unity做出在固定大小区域显示主摄像机看不到的画面
使用Unity做出在固定大小区域显示主摄像机看不到的画面
前言:
这次的标题好长啊。但是我也不知道怎么写这样个标题。最近做项目刚好遇到了这个需求,所以标题就是按照需求写的。这个项目后面转给同事了。不过我觉得这个要求挺有意思的,所有我就做了一个Demo。这篇文章希望能给要做这种要求的你提供一个思路。
项目的要求
这次我做的项目要求我做一面照妖镜。然后角色可以使用这个照妖镜去照射出妖怪的样子。所以我需要在一个固定大小的区域中显示出主摄像机看不到的画面。即玩家操纵一个UI,然后UI里面要显示出主摄像机看不到的画面。(Unity版本2020.3)
主要思路
因为要操作UI去看到不一样的画面。所以我打算直接在UI中实现。我设置一个Raw
Image(覆盖全屏)配合Render
Texture进行画面的显示。然后用一个mask遮罩将画面超出照妖镜的部分遮盖掉。一开始照妖镜是不显示的,只有玩家操作时照妖镜才会显示出来。
实现
配置
我们设定主摄像机的Culling
Mask看不到UI层。自然那些“妖怪”就要是UI层的。具体设置什么为主摄像机不可见由你来决 ...
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的公司,我听在此公司的朋友说:这里并不能给我很大的成长,只能说稳固我的技术。让我熟系一下开发的业务逻辑。我更想学习一些开发的流程、 ...