粉丝373获赞3693

![[零基础]学习C#在Unity中的使用|入门01:创建变量 #编程 #游戏开发](https://p3-pc-sign.douyinpic.com/image-cut-tos-priv/ab6ce8899a2d3de6523b97d7cddbdb20~tplv-dy-resize-origshort-autoq-75:330.jpeg?lk3s=138a59ce&x-expires=2081876400&x-signature=1TsvN%2FNSezjSrUPj%2BLHd6FfiEeQ%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=pcweb_cover&l=202512240346105C597532301314455460)
哈喽,大家好,我是麦口。这个系列视频教程是为了帮助那些想学习 unit 开发,但是又不会 c sharp 这个编程语言的小伙伴们准备的, 如果你是零基础,那么这个系列教程非常适合你,如果你已经了解这个语言了,那也可以将这个系列教程的视频分享给那些想学习他的人。谢谢大家, 那么我们就在 unit 当中来学习这个 c sharp。 好,话不多说,我们直接打开 unit, 那这个系列教程我使用的 unit 的版本是二零一八点四点五,所以打开之后我们可以新建, 点击六,我们简单创建一个二 d 的游戏,我们就叫他编程的教学 code to toyo, 点击创建啊,打开了,这就是我们的 unit 的主界面啊。如果小伙伴你想了解这个 unit 的主界面的构成啊,可以看我的另外一个系列的视频啊,创作第一个游戏的有关于 unit 的介绍。那么在这个视频里,我们还是主要来讲一些代码, 那我们为了让这个代码可视化一些,首先我们在我们的这个哈瑞奥体的窗口里先新建一个可以使用的游戏项目,然后我们为他添加代码,我们点击右键,然后三 d 的 object, 我们添加一个 q, 二 d 的场景,同样可以添加三 d 的项目。好,这就是我们添加好了三 d 的这个项目。我们先不管这些东西,我们要为他创建一个 c shap 的代码,然后我们还用来编写进行学习,所以我可以选择 atcom 添加一个组件,然后我可以在这里边啊找到有一个叫做 new script, 所以我可以在这里起名啊,比如说我给他起名叫做 player controller, 然后他会自动帮我生成这个新的 script, 变成变成的代码,所以我点击新建,然后我就有了 player, ctrl 了这个 c sharp the script, 然后看到我的 q 部里面也有了啊这行代码,所以我可以双击在这里面打开我们的 vs, 在 vs 里边我们就来学习嗯,这个 c shop 的基础了。那首先我们先来看一个东西啊,这个 star 的和 update 我先放在后边。首先我们来看这个代码的一开始, 一开始有一个 public class, class 是一个类,这个类通常后边跟的名就是我们这个 c shap 的文件代码的名称, 然后他所调用的类的酷是猫呢? behavior, 这个猫呢 behavior 里边包括有很多的函数和方法,那以后我们会逐一的去了解, 在这个视频当中我会来告诉大家哪些函数是这个 unit 和 c 差不本身自带的,为我们准备好的,尤其是 unit 的安振 啊,在尤尼西的这个游戏隐形里边已经给我们做好的,我们不需要自己去调整,那也告诉大家如何来做属于自己的这种函数,所以我会区分这个,如果是系统自带的,你就把它记住就好。那么首先我们先来看啊,有两个创建变量的方法,我们先 先来学习变量,怎么创建变量呢?好像一开始这个 public 一样,创建变量有两个,呃,开头的代码,一个叫做 public, 一个叫做 private。 好, public 的意思是一个公开的意思,所以你所有生成的 public 的用来生成变量,这个变量的话可以在我们的函数代码之内调用,也可以在函数代码之外用别的项目来调用它。 这个 private 的话就是一个私有的,所以它创建出来的所有的变量仅限于在我当前的这个函数代码的克拉斯里边来使用,在外部是不能调用的啊。那么同样帕布里克生成的这个代码是 是在我的 unity 的窗口当中, inspect 的窗口中可以看得到的,但是 private 是看不到的,所以我们先用 pap 的来学习这个基本的创建变量的方法。我把我的代码再调大一些。 首先我们来学习一些基本的代码,首先第一个就是整形 integer 整数,所以它可以是什么呢?比如说 house, 然后我给他一个值,比如说五,好像我们的人物有五滴血一样啊,有五滴血是整数,整数的意思就是他不是小数啊,只是所有的整数类型, 这里介绍的他家就是正常的声明变量的一个方法。我们来看一下,这里边是 public 代表我这个当 前变量的一个属性,是公开的还是私有的? int 表示这个变量的类型是整形, house 是这个变量的名字,然后等号后边是给这个变量在一开始进行了一个复制,这是基本的生成变量的写法。 那我们再来看另外一个常用的 float, float 就是一个福点型,福点型是什么意思呢?我来写一下,比如说我们的 speed, speed 可以等于什么呢?五点五 f, 所以它是包含小数的,就是这个伏点性,所以通常后边会跟一个 f。 那么在新的版本当中呢?这不写的话系统也能判断,但是我们还是了解基本的写法啊,大家形成这个规范,所以我不要和小 少数的都是 flow 型福典型。然后我们再来看另外一个我们常见的类型,嗯,就是布尔型。 什么是不尔型呢?就是错佛斯的真假值,比如说 is jump, 他是否跳跃呢?我们可以告诉他你是 处是真知或者是 false 价值。那如果我不给他这个变量,那他默认是 false 假值,那我们保存这个代码。我们回到 unit, 看看我们创建了三个变量之后, unit 的窗口里有什么变化。我们回到 unit, 选择 cube, 在 inspect 的窗口里有 我们。请留意,这里边已经为我们生成了刚才我们写的 house, 我们的呃,生命值,然后我们的 sb 的看,已经有了值五和五点五,同样,我们还是可以在这里面进行更改,这个不影响我们的代码的内容。然后看到这个 ace jump, 这个有个 check box 啊,复选框,他默认是没有被选中的,也就是他是 faws, 如果选中了,那么他就是出真值。好,所以看到了吗?只要我在帕布里克鞋上的生成的变量在 und 的窗口中都可以看得见。那另外我们还有一个类型的, 呃,变亮,我们要来看一下是什么呢? public game object 这种,像 game object, 比如说 pre air 好 game object 这个变量,这是我们 unit 的 engine 里边自带的啊,这个变量的生成的类型的名,这个类,这个类代表什么呢?每当我在 unit 创建一个新的东西的时候,一个物件的时候,它都叫做 game object, 所以所有在 haraoki 里出现的东西都代表叫 game update 是一个项目,所以比如说我把它叫做 player 啊,可能是我们的游戏玩儿啊,主角我们不用管它,然后我们看看我们的 q 吧。这个时候啊,我没保存我的代码, 我保存一下,切记,喜欢代码一定要保存。迈克系统是 ncome 加 s, 温度是 nctrl 加 s 来保存他。然后我们回到我们的 unit, 在 inspect 窗口里,我们就可以看见了,他在问你,你的 player 是哪一个 game object, 看到了吗?所以我生成了 game object, 我就要获得他,获得的方法就是拖拽将他放到这, 那么有什么用呢?一旦我获得了这个 game object, 我就可以使用这个 game object 里边的所有的 肯 pone 的啊。这个组建,包括他的形状,大小包,包括他的渲染的模式,包括他的碰撞器,包括以后我们学习的各种各样的 ctone, nine, 都可以来获得,所以 game update 是这个意思。那么同理,我们再来练习另外一个, 如果我 public 的是一个 transform, 举个例子, player movement, 我具体写了这个 transform, 这个 transform 也是 unit engine 当中一个默认的,那这是在哪儿呢? 我们看,当我选中一个项目的时候,给抹布这个的时候,它上面就会有 transform, 所以 可以很清楚的明白,如果我想获得某一个 transform, 我就会具体更改他这一个 transform 的肯碰呢里边的这些值的变化。 哎,明白了,小伙伴们,所以我想声明啊,哪一个 compone 想编辑他,我就可以生成这个 compone 的泪,然后定义一个名字,变量的名字,那我就会看到这个变量的名字出现在这儿,那么以后我就可以来直接使用这些变量了。好,这是定义变, 那么这个部分我们先不要,这大码中用不到,然后我们来看看接下来的这两个东西。这个外的开头的代表的是一个方法执行的方法,那换句话来讲,我们通常管它叫函数, 函数是什么呢?他在里边可以有很多条语句,然后用这个函数名来一次执行这个括中括号里边包含的所有的命令名,所以他的写法就是 why 的,然后函数名加括号。 那么默认的情况下,这个 start 和 update 是系统给我们的,这个 start 是什么意思呢?每当我在游戏当中点击这个 play 的这个 button, 那么这里边所有写的代码将会被执行,那么 update 呢?上面有一个 角柱,双斜杠是角柱啊,不对的是每一针会执行一次,那如果我的电脑是能达到这个游戏执行是三十针每秒,那么换句话来讲,他就是每秒执行三十次的意思啊, 我在这写上中文好,然后其实系统还有给我另外一个预制 叫做 wide awake, 这个是也是系统默认给我的 private 不需要。 awake 是什么意思呢? 无,无论啊, script 是否启动,都在 开始的时候运行一会,我们来看这个方法怎么来执行,那我们来简单写一行代码来实现吧。通常在教这个编程语言入门的时候,大家都喜欢用 hello word, 那我在这次就不想跟大家用一样的,我希望他执行。哈喽 michael, 我希望这个游戏一运行就弹出这个,嗯,这行代码啊,哈喽迈克,所以我们来看看怎么做。首先我们来试一试,在 star 里边, 大家请记住,这是一个系统默认的,在我们的 conso 的,也就是我们的这个后台里边来执行显示一些命令,用来抵 bug 的时候,我们执行的命令是, 嗯,第八个到那个 括号,括号里要写了什么呢?嗯, 这里边就是写着你想显示的值,所以我们用双引号来把我们想要显示的字符写在里面, michael, 所以在这里每写一行代码结束之后要有一个分号作为结束,结束这行代码的生成。那在这里边我们也要额外再讲一下这个双引号,双引号是代表什么呢?双引号代表生成的是 string, 字符形,字符形,比如说 name 等于 michael, 所以所有的字符形, 他的写法都是要用双引号,中间就包含着你的字符,就是这样的。好,那我们这一行代码其实没有用啊,我们不用管他,所以斯大的里边我执行了这 信号代码,请在这里边啊,生成一句话就是,哈喽麦克,保存,我们回到我们的运气游戏当中,我们点击 play 的吧它,启动它,然后请注意这个 console 的。呃,监视器的窗口里面显示的内容, 哎,当我运行的时候看到这已经写上了吗?写上了,哈喽麦口, 好,这个是 start。 那我们来理解一下什么叫做 update, 我将这行代码剪切放到 update 里,这里说到了每一秒 都执行,每一针他都执行,所以我的电脑差不多能够达到六十针,所以一秒钟要执行六十次,所以我们来看看效果。保存一下,我们到这 ctrl 里边点击 clear, 清除这里边的信息, 然后我们点击播放, 看到了吗?他在一直执行,看已经这 二百多条了,所以他会一直执行,所以小伙伴们,你们明白了吗? update 的意思就是每一针他都在执行,可能一秒钟三十到六十针,甚至是一百二十针在执行这个内容。好,这个是 update。 那么俄威克呢?看起来俄威克跟 star 差不多,都是在一开始的时候执行,但是请留意 点击颗粒啊。如果我的这个 q 他有一个我们添加的 script, 如果我把这个勾取消,就代表他不启动这个代码里的内容,那在不启动代码的时候,我们还是将它 放回 star 这里边。在我不启动这行代码的情况下, 如果我点击这个播放的按钮,那么他不会在这个 ctrl 里边执行我的代码里所写的这个命令。看到了吧?没有这个命令,可是如果我将它放到额外克里, 那么刚才说了,无论这个代码是否启动,他都会在一开始执行,所以请留意我的代码没有启动,然后我们看看 over。 好,我还是得到了这一场命令的显示,对吗?所以这就是 awake start 和 update 他们之间的关系,还有我们介绍了基本的 变量的生成的方法,那么这个视频就先到这小伙伴们如果,嗯,你很喜欢这个系列视频,请为我点个赞, 也可以收藏并分享给其他的小伙伴。还有如果你有任何意见和你想要知道和了解的,都请给我留言啊,或者给我发信息都可以,那么我们下一个视频再见吧,拜拜。
![[Unity代码解读] Touches.position获取触屏位置](https://p3-pc-sign.douyinpic.com/image-cut-tos-priv/f253f0cd34691f03da71344d4f44eaac~tplv-dy-resize-origshort-autoq-75:330.jpeg?lk3s=138a59ce&x-expires=2081876400&x-signature=VS%2BIPYOGPIPR1yzyHWB6inXOcss%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=pcweb_cover&l=202512240346105C597532301314455460)
各位朋友晚上好啊,我是黄山清。哎呀,刚刚有一个非常 牛逼的 unity 官方讲师,那个 joker, 他既然关注我了,我好开心啊,我会虚心向这位大佬学习的, 谢谢大佬的认可,我会,我后面会积极的做这些视频。好,咱们话不多说,然后这节课呢,我讲解的是 那个 touches 点 position 那个 a p i, 然后咱们现在开始吧。呃,这个页面呢,是在那个 我的另外一个视频 touch count 呃的那个视频,那就是那个场景的基础上又增加了一点东西。呃,我是怎么增加的呢?我又增加了一个文本框。呃, 然后呢,创建了一个正方体,用来做带回显示在手机端显示的光标吧。然后还是在 demo 零七幺七这上面写脚本。 首先呢,我要一声明,一个 tax 控件去关联这个这个文本控件嘛,是吧?然后再获取到这个光标的对象,我们看一 一下这个这个脚本是怎么写的,我们在我们在手指触碰到屏幕后, 会进入 if 语句,进入这个逻辑里面,他这里呢就是一个安全的操作,判断是否存在光标对象, 这里可写可不写,写了以后就更友好一点吧。然后呢,我们在这里就用到了今天主要讲解的这个 a a p i, 就是这个 touches, 它能管理我们每一针, 我们有几个手指触碰到了屏幕里面,他把这些手指的信息,每一个触碰的手指,他们都被怎么说呢? 就属于一个 touch 对象,然后他把每一个 touch 对象呢去放到这个 touch 时,这个 数组里面或是列表里面去存储。然后我获取的这个零呢,就是 第一个手指每一针第一个先按在屏幕上的手指 这个对象,是吧?然后我们点这个 position, 就是获取到它的这个位置信息,那它这个位置信息呢?可以看到 它的返回值是是 vector 二类型,也就是屏幕的坐标, 它的范围呢?是 手机屏幕的长宽。 oh, 待会我们进入到手机端可以看一下,然后我这行代码,这些代码表示的是什么意思呢? 就是我们又声明了一个临时变量来存储 这个手指触碰在屏幕上的屏幕坐标 x 和 y, 然后我们因为我们要从, 因为我们要从屏幕转到世界坐标系下,我们我后面会主要讲解这个 a p i。 啊,咱们就看一下,因为我们要从屏幕转到世界 这个虚线网,然后他这里好像有一个小坑,呃,就必须要设置这个项量的,呃,这个 vector 对象的 z 值, 呃,如果你要是不设置,他默认是零,你是看不到这个光标的。对,所以你要设置一个,设置一个正值好一点,他这个正值我上网查了一下,就是 离相机的距离,对, 这个 z 值就是离相机的距离。然后我们设置好了这个对象以后,就传到另外一个 a p i 里面, 我们就通过这个转好的坐标值来复制给这个光标的基于世界坐标器下的这个位置。好,咱们就看一下,咱们现在切换到手机端, 好,朋友们,咱们现在已经切换到了手机端哈,注意,当我要,我现在是即将要把大拇指放到屏幕上面,大家注意看哈,看到没?哎?他是会动的, 它是会动的,看到没,触碰的点数为一,然后第一个触屏点的屏幕位置是基于我们这个手机端它的长宽, 他的他是以左左左下角为原点来计算。呃, 看到没?很清楚,当我们松开。哦,这个地方也是有个小 bug, 我们有写这这这个方面的逻辑, 你看他是在这个平面的基准上间隔,呃,三三米单位的这个距离,看他不停的在移动,是吧? 好,那本次课程就到此结束,感谢各位关各位用户的关注和订阅。

这个讲座的目的就是希望我们一些 ui 需要拼界面的同学可以就是呃完全的掌握,然后对以后那个界面的设计和构成,还有对 unit 有一些了解。 我们先看一个例子,这个就是,嗯,有你体就是拼出来,然后包括一些动效上面的效果,就是游戏里面的录屏, 然后这个动效的话是用那个 animation 还有那个 doing 一起做出来的。那首先用立体的界面我们可以看到就是,嗯,最上面这一块就是我们的菜单奶,然后这边就是一些控制的东西,这个是预制品内部结构,我们可以把它展开看, 然后在这个地方我们可以进行一些操作,然后这个地方是我们参数的一些调整,然后这个就是工程目录, 然后我们可以在这个地方去进行布局的调整,这个自己可以看一下。第一个这个就是我们可以移动屏幕, 这个是呃移动物体旋转缩放,还有显示外观和毛点那个快捷键,大家到时候可以就是拿这个 ppt 自己看一下。然后这是我们的场景里的操作,比如说我们可以横向移动,纵向移动,还有就是我们旋转中间的话,它是可以四个方位自己移动的,这些大家都可以就看一下。然后关于那 参数面板的话,我们这个 regret 是还原,还原到就是我们打开预售再开始的样子。然后我最爱的话呢就是保存这个地方呢是比较重要的是一个,嗯调整我们的适配, 嗯,还有他的,比如说位置啊,没有毛点之类的,然后我们毛点的位置是可以在这个地方,就是这个地方可以进行一个那个调整数字的调整,他的区间是零到一, 那我们就是毛垫在中间的时候是零点五,零点五,然后左下是零零,右上是零一一, 然后我们点击这个的话,它是可以添加组件的,比如说一些哦马斯克啊,一些动物效,那个都情啊,或者图片啊、文字之类的。

你们知道怎么样在油内黑中导入别人制作好的特效物体吗? 大家好,我是郑大叔,一个在家自学做游戏的奔四大叔,今天呢是我接触游戏制作的第二十八天了,我呢想给钻石计划增加一个在水中的感觉,但是我是个新手,又不会做水,怎么办呢? 都说站在巨人的肩膀上可以看的更远,我觉得在做游戏的时候也是同样的道理, 其实现在呢,网上有很多人分享出来的现实案例,我们完全可以学学别人是怎么做的,或者直接用别人做 不好的东西不就可以了吗? nice, 我在给他的上面找了一个水面特效的案例,是不是挺炫酷的呢?但是这是人家的项目,要怎么样用到我们自己的项目中呢? 这时候隔壁老王跳出来说,直接把项目里面的所有文件都复制过来不就可以了吗? 这样的方法可以,当然是可以了,但是垃圾太多了,很多又不是我们需要的,那有没有更好的办法呢? 答案就是打包导出。就是呢,把我们所需要的物体制作成预支件,然后呢进行导出,那相关的文件就会一起打包, 接着呢,在我们自己的项目中导入这个包,那相关的文件就都会一起导入进来了。觉得跟我们项目的配色不是很搭,那就调整一下, 嗯,完美搞定,嘿嘿,这效果有了,我们打包试试看一下人家的文件跟我们的项目兼容性怎么样, 果然还是发生异常了,那我们先看一下出租的原因是什么呢? 其实呢,不管是写程序也好,做游戏也罢,运行或者打包出错应该都是家常便饭的事情,只要我们冷静去查找对应的资料, 我相信一般都会解决的。那这里呢,就是需要把这个类放到一个特殊文件夹里面,然后我们再重新打包,这一次希望一切顺利。 怎么样,这波澜壮阔的场景,是不是完全有一种身处大海之中的感觉?看到这里,你是不是应该点赞关注啦?其实呢,站在这么多年 我学习了一大堆东西的经验之上,我并不建议在学习阶段过多的去依赖别人的作品,毕竟别人的东西不管用多少次都不会变成我们自己的。 然后话又说回来,学习怎么去用别人的东西,那也是必要的,至于用不用才是我们的选择,你们说对吧? 好了,今天我们就聊到这里,有想法的小伙伴欢迎在评论区发表,我们明天不见不散!

ok, 接下来是寻路。什么是导航寻路系统?那么云体中的导航寻路系统是能够让我们在游戏的世界当中,让角色能够从一个起点准确地到达另一个终点,并且呢能够自动地避开两点之间的障碍物,选择最合理的路径进行前往。那么云体中的导航寻路系统,它的本质呢?就是 a 星寻路算法的基础上进行拓展和优化的, 那么导航网格的生成就是 never match 的 生成。要想角色能够在场景中自动寻路产生进行路径,那么必须得有 场景的地形数据,导航网格生成就是生成用于寻路的地形数据,那么导航网格寻路的组建,它就是 never match again, 这个组建就是帮助我们根据地形数据聚散路径让角色动起动起来的关键。 那么导航网格连接组建就是 offmatch link, 它是当地型,中间有断层,想让角色能从一个平面跳向另一个平面。网格连接组建时的关键,那么导航网格动态障碍物组建它,它就是 never match。 obstacle 就是地形中可能存在的可能移动或动态销毁的障碍物需要挂载的组建。那么网格外的连接组建是什么? 就是我们在烘焙地形数据的时候可以生成网格外连接,但是他需要满足的条件都会生成,而且是在编程模型下生成的。如果我们只希望两个未连接的平面之间只有有限连接路径可以跳下去的话,并且运行时可以动态加添加就可以使用网格外连接路径就指哪打哪的一个效果。嗯, 但这个我也不是很理解,网格外连接组建的使用,使用两个对象作为两个平面之间的连接,就是起点和终点,添加 of mesh link 脚本进行关联它设置它的参数的话就是 agent 等于 they start get complete narrow mesh agent。 导航网格动态组建 用来是干什么的?在游戏中呢,常常会有这样一种功能,场景中有一道门,如果这道门没有被破坏,是不能自动导航到门后的一个场景的,只有当这道门坏了,我才能够到下一个场景。而类似的这种物体本身是不需要寻路的, 所以呢,没必要添加 nevermind agent 的 java, 这时就会使用到了动态障碍物组件的实现该功能。那么导航动态障碍物组件,它的一个使用 就是说为这个物体添加上的外面是 opposite skill 它的组建,再设置相关的参数,再代码,再去控制它啊,就 ok 了, ok。