【Unity+C#】Unity手把手入门基础演示,并实现一个翻滚的球球小游戏

先安装好Unity环境,此步骤省略。目前我安装两个Unity编辑器,一个是最新版2023.1.x,一个是最新LTS版本的2022.3.x

ecbb5773e8bd2b1e0cd61fee54247482.png

同时,本地已有VS2022环境,VS2022需要勾选Unity的支持。如果你已经安装好Unity,有Unity Hub了,可以勾选Unity以后,把Unity Hub取消勾选。安装VS2022也省略。

2ab5e181e1747de0f068a9e2c075ff8f.png

一切环境准备就绪,Unity授权完毕(个人版本免费,学生党可以使用教育权限授权教育版,有钱的土豪可以自己选择其他版本。学习使用的话,个人版本够用了),就可以开始创建项目。右上角选择 新项目    

9496de7850ce9066bb724717a660f52c.png

选择3D项目,以及命名项目名称,例如翻滚的球球

cb504bca4bd6ded306ebe737b2414da3.png

电脑配置差的情况下,第一个项目这儿会有一个加载项目的过程,可能花一点点时间。包括下载初始的一些资源等等。

76ad3b0183721354cc164b843adebc72.png

全部准备就绪完毕,就可以进入到初始化的场景页面了。初始页面如图所示。

318ecd1894568aac79a4da479c48a9ea.png

Unity编辑器右上角可以修改布局,也可以自己拖动。右上角可以快速布局,例如Tall、双屏、四屏等等    

b7a81789779ffe1c9e8234bc3866f3d0.png

或者自己可以对布局进行一系列设置以后,然后保存为自己的习惯性操作的布局模板。选择右上角-Save Layout,即可保存成你的自定义模板。后续你操作期间布局搞乱了,就可以一键还原你配置的布局模板了。

3e6a6ef4f5a9f1c47971ab9c81921da0.png

在布局栏可以看到自己配置的自定义布局模板

8a66434ae9ed739186f75a145fd5f791.png

接下来看下项目目录结构。快速找到项目路径:Assets右键,文件资源管理器内打开,既可打开项目目录。并且可以看到,生成的项目自动就有一个sln文件,大家做.NET开发应该很熟悉,说明Unity可以直接用VS进行一些业务、逻辑的开发。    

d7fe08f6c08d4d7dc6f5e88ded47d87e.png

场景页面的项目下,还有一个packages目录,可以理解为各种资源、插件等的存放路径,类似.NET的VS项目的nuget包引用的一堆包之类的。    

863612f33997174484fcb934e5c80e05.png

这些包默认是本地最初始的资源,如果需要第三方资源或者其他资源等,可以上左上角“资源商店”进行寻找或者购买你需要的资源.

f2fdc5a774029f2828f3508ed0b0a394.png

默认是英文的,如果对英文感觉压力大的,可以选择中文。在“编辑”-“选项”里面进行配置。    

1a77545775f9948074f305ea35eb7eba.png

找到语言选项,改为中文即可。如果没找到,说明你没安装语言包,自行安装一个语言包就行。    

55a9407751cd26df4a966adf48a3d81f.png

切换成中文以后,如图所示,很多英文就变成中文了。如果没生效,就重启Unity项目即可。默认情况下,建议使用英文,通用一点。有时候中文可能描述的和英文内容有一丢丢差异。

e4fe0a9a1afc9af82698f2629edeb902.png

配置Unity后端代码的开发工具,【选项】-【外部工具】里面。可以自动识别你本地的C# 开发工具,例如VS2019、2022以及Rider都被识别出来了。我把他改为VS2022,2022才是目前最强IDE。    

45302ebb317e070d004341e99938d19d.png

回到项目模块,Scenes里面存放的是场景,可以有多个场景。双击场景即可打开场景页面。

dcff3e0af4d3fa61e96c46c7f97d819f.png

Hierachy是对应场景所有的物体都会显示在里面。例如初始默认有一个太阳光、一个摄像头。

579613693eb532fd1d3e6eda01124810.png    

这里面可以添加各种物体,例如Cube方块,场景里面就可以看到对应的方块了。场景里面通过鼠标右键可以旋转各种进行查看。这里面的物体,都是GameObject对象。

bf54c005bb9ab25804463dfa37ff2853.png

调整方块位置,以及光线,或者调整摄像机位置等,选中摄像机可以看到右下角的预览效果。

9b8fd3a248b75e6e60e7dd9ea5c46fe4.png

左上角Game可以看到游戏打开时候的页面效果,和预览是一样的。实际上就是摄像机是视野范围内看到的效果。    

5d948b59f6d7092930b53cebc3ae881a.png

层级下面选中的物体,选中以后,可以看到Inspector属性页面(类似winform的控件属性)    

3032eafa915f38563ddeeb0ef8484bec.png

场景的常用快捷操作:

选中物体,Ctrl+d可以快速复制。

鼠标右键按住,可以对场景进行旋转。

按住左键拖动,可以对场景进行拖动。

选中物体,按F可以快速聚焦。

按住Alt,可以通过鼠标左键对聚焦的物体进行旋转。

按住鼠标右键,然后通过 WASD可以进行四个方向移动。通过Q\E可以进行上升、下降。

场景右上角视野切换,Persp代表人眼视野。ISO代表平行视野。

e950994e3534d13f3cae6774ad5bee15.png

场景内坐标系,默认是米为单位。    

bb8b9b13fc4e2757128a195f498c31ee.png

模型中心点,Pivot和Center

Pivot是当前选中模型自身自己的中心为坐标系

248829379c24cf2aa83267b09567a719.png

Center是以选中模型的整体,包括它的子模型的中心点为坐标系

e42f0c703d899cc1e1829f158637653e.png

全局坐标系和局部坐标系。

7b4add064f6ae48cb784a52adccf9031.png

选中Global,代表全局,物体旋转啥的,都不会改变物体自身坐标系的方向,会和场景保持一致。例如红色的X轴,都是右边。

a3e8289bf5a7fd75a1508642efdbad23.png

换成本地,可以看到场景的X轴方向和物体的X轴方向 不一样的。例如箭头指示两个不同方向,红色的X轴。当然,其他轴也是不一样的。    

329998eb850349c5cfb72e1970d3ae90.png

物体如果需要还原为最开始的默认位置和其他状态,可以通过点击 重置 选项来快速恢复

f7d353b2102443159e923bde347aaaa0.png

导入3D模型

可以从以下网站进行寻找可用的3D模型,有免费也有付费

https://free3d.com    

d15f8a71c850d04a1577aca2a1b827a5.png

例如我下载这个老破屋,个人可以免费使用,此处我下载它的fbx格式文件进行备用

7c4a1eebaa5fed45987322aa0079ef63.png

解压以后,得到一个fbx文件

74355ee22de1d3573c82113f9b7f369e.png

用鼠标直接拖到Unity编辑器内的资源文件夹下    

997d5652ecf0a1fb479bbf11feb9169d.png

选中以后,可以在属性栏里面查看到3D模型的预览效果

663d0087995ea2f57ad4e5cfb731fe8b.png

使用的时候,直接拉到上面就可以在场景里面看到模型了    

112d76fee3a59257cd49dc20fe59f607.png

接下来实战一下,开始真实的翻滚的球球的开发 

创建一个新场景

bf9e27ceb8feffd3f3a26b17d13b280e.png

创建一个地面 Plane    

314ac7f61b22ec2d0e65b703882add82.png

新建材质文件夹,然后新增一个材质    

6f3f6a0c3be495d592186ab28b2ec098.png

然后给材质默认颜色改个色儿    

7527796af5d4ad561d18f936b5be22a3.png    

材质可以通过物体属性里面进行选择,里面内置很多已有的材质,以及刚刚我们自定义的一个材质

1cd9bc96fa4eaebb7ec24f5a4221c0e6.png

也可以对物体进行贴图,物体属性-Albedo里面进行打开贴图选项    

97ed5153037d145c6a1b70e62277d84d.png

创建一个球体,以及这个球的专属材质

ae9aa15d85648d28387730abf4757a2b.png

物体属性有Renderer和Collider,前面是做渲染使用的渲染模型,后面是做碰撞检测的碰撞模型,两者是分开进行。    

70b1c5593f1694c87ffe5732729bf799.png    

碰撞模型可以选择其他模型,例如更低性能损耗的。

d021399128790f8a95dd2a904a478123.png

选择物理模型

42d02decd00d08e4cf14333200cb8927.png

选择Sphere碰撞模型    

b5f4b44458456576da8a24daccd1d695.png

球体外围就会有一层碰撞检测的简化模型

efa4e4dbc072ec3850224ac1d2518fc9.png

取消渲染模型,可以更清楚看见碰撞模型

18bbb1c02e8b33b13c6748b844f0af2e.png

为了能够控制球体运动,需要新增刚体组件RigidBody,增加这个组件以后,物体会受到重力、摩擦力等的影响    

c057361a79e96af30bd44f9399ad6425.png

这里面可以设置物体的重力、摩擦力、是否启用重力等等选项。

ffd7b45e2586b040dd76956388cda516.png

创建一个C# 代码脚本文件    

d0dee284e0ba61815316e51f7d6d5b72.png

把代码脚本文件,直接拉给物体模型,就可以自动绑定,脚本代码自动也成了属性里面的一个组件    

5e88545e175e159bad90ff1f2464d69a.png

双击C# 脚本代码即可自动启动VS,VS版本啥的,前面文章内容有提到过在哪里配置,如果不知道可以回去看一下。    

0ba0276ea729c65125aa6486b8d92c00.png

在Start里面写一个日志输出,例如Hello Unity  

它会在程序启动的时候执行。    

3f1cd3e5f476ae2129d91db9a3e81388.png    

点击运行程序,可以看到左下角出现我们的日志输出。点击日志,可以打开日志面板。

a36183f4e18bc74afc05187967f44260.png

点击对应日志,可以看到日志归属哪个类里面的哪一行

c0df9f3a347df8907c48fea5b34c4f88.png

再测试下Update方法,输出当前时间,精确到千分位的毫秒    

11bfff761e167002177bfd350910a41e.png    

可以看到它一直在输出,这个输出代表的是每帧都会更新一次

67a3a2f4cc7b59a43e9ea54896b9d3be.png

所以根据前后时间,我们可以计算出帧率。咱们换算下帧率,然后继续输出到日志控制台    

f87f70342f60864cf509479344778b94.png    

运行程序,输出日志,即可查看当前实时的FPS,看到当前FPS在130-150之间波动。这个数据和你自己电脑配置相关,电脑配置越高,FPS越高。

81f90f7e5aa3fc0db764b6320a7dcbe7.png

新增一个刚体变量,并在Update里面新增一个受力方向,例如右手边。    

c911d218abb0e89a1fd9901b86a1f87b.png    

公共变量会在属性里面看到,直接把刚体组件拉进去赋值即可。    

c38df96d2d66471c31530404e5aa6f8a.png    

然后运行程序,可以看见小球落下以后,受到外力作用,往右手边滚动。

7869db6854d578cb10f26eaf8e360f0d.png

简化一下代码,新增获取前后左右方向的水平轴数据,该数据可以通过按WSAD或者上下左右按键获取。不过需要传入水平或者垂直两个字符串信息,这点需要吐槽下Unity,如果做成枚举多好。然后运行程序,就可以通过WSAD来控制小球四个方向移动了。

cd0a97592c5817f1324e9285f95f2ecc.png

 新增一个脚本给摄像头,用于控制摄像头跟随物体移动    

b83454d9a415d52562c3ab6a54944cd6.png

新增一个GameObject对象,然后在摄像机模型属性下,把球体模型复制进去进行赋值

25a785a8cf339f27e61497a42ec766b2.png

然后获取球体和摄像头本身的初始坐标位置,在Update里面实时更新摄像头位置    

3afa1594cdd526ec87f02c919b40957c.png

创建一个Prefabs文件夹,用于存放统一管理的模型,例如可能多次使用的同款模型。然后创建一个小球,拉到Prefabs文件夹内,弄扁以后丢场景内,就可以批量复制同款了。

f483f89920a6667379cfaf20c77f3937.png

然后创建一个基于该模型的脚本,例如就叫Score,然后复制给Score物体    

729c0ec45992969216fe1773f385d7d8.png

新增旋转功能代码,让圆饼可以旋转.up是围绕Y轴旋转,Space.World代表按照全局,而不是自身进行旋转。

a578ca29e884591c3a6238d05ce8408d.png

此时运行程序,应该可以看到圆饼在旋转了。继续对这组物体再新增Tag,Tag可以用来存储数据,例如此处用来存储圆饼类型,这样每次球体碰到该类型就触发得分。例如新增一个ScoreTag    

4a93b1b6bb85983119ad3923c313cbb2.png

在球体的脚本代码内,新增碰撞内置方法OnCollisionEnter,用来输出查看碰撞效果

379e5b4cae1e4ff9c03c70564e74445b.png

然后运行程序,可以看到小球碰到物体以后输出了有关内容,并且圆饼的Tag也都一致。这样就可以用于直接判断是不是ScoreTag来进行是否得分了。    

8965f32909ace347768c34f4cd3d8c0e.png

做个判断,每次碰到圆饼,就让圆饼销毁,达到被吃掉的效果

10ec5502e0840e8ab458d3986b6fb6fd.png

运行程序,实验下,可以看到碰到的地方被吃掉了    

dd62b055703a7fafb5e27348aae49580.png

但是此时球体碰到其他物体会被减速,所以需要使用触发器来代替原生的触碰器。勾选启用触发器。    

4e00c6aa66d46641a2bf27931865543d.png

新增自带的OnTriggerEnter方法,操作方式和上面的触碰检测一致,只是参数不一样,但是参数内的元素是基本一样的。然后再启动游戏,就可以看见会被很顺滑地吃掉了。备注:【触发器里面,other.gameObject.tag和other.tag等效】

91bba09999ddcc0ae3a5d262c82f2c29.png

新增一个得分属性,用来存储玩家的得分。    

a780a5c6e4c7138353ec6bf6b045d1cb.png

例如每次吃到获得10分

dc2968d4b2d0bb910c3a1ab1384bc74f.png

运行程序,可以看到吃到以后,积分属性值跟着新增了

8cdcb4171c76f5a41f6af0d85be8304b.png

接下来需要把得分显示出来,新增一个文本UI控件    

56564f68520f17088464e18634876793.png

提示需要引入TMP,点击导入即可。    

901f3f033a68729730fbbff3222857d0.png

场景视图内,切换为2D,聚焦以后,修改对齐方式,例如居中上方对齐

e1ad2ccafa7cf99cad541a9f9af876bd.png

然后运行,可以看到不管页面怎么切换和改变,UI文本都在居中上方不变

0e5f6c4b65c898c177cd0c1f0c92a9ce.png    

接下来,新建一个TextMeshProUGUI类型的属性,然后把刚才新增的Text UI拉进去赋值。

dd4d4eafd87415da26aa61f8ac1d69d8.png

每次吃到进行UI文本的更新

b8ee3d5da0191ec1b03da74d85258a12.png

启动程序,可以看到吃到以后,积分开始累积了。    

7a40982196b5f552c4cc0c23a66a4686.png

一切写完以后,就可以进行发布游戏了。在文件里面,选择build settings,然后把需要发布的场景拖过去。

4c3dee2d292a4bbe81b7041358a00dd3.png

选择需要发布的平台,然后编译即可。    

038641b2fd1240306dcf6659eca1811f.png

发布以后,就可以开始愉快地自己玩耍了

42d81275b5116f1b1e2edf36c333748a.png

  以上就是本文章全部内容,如果觉得有帮助,欢迎点赞、转发和在看。当然,要赞赏也行,写教程也有点累人。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值