【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

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

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值