前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Unity+C#】Unity手把手入门基础演示,并实现一个翻滚的球球小游戏

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

作者头像
Wesky
发布2024-08-27 17:23:38
2630
发布2024-08-27 17:23:38
举报
文章被收录于专栏:Dotnet Dancer

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

场景的常用快捷操作:

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

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

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

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

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

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

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

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

模型中心点,Pivot和Center

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

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

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

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

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

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

导入3D模型

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

https://free3d.com

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

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

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

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

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

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

创建一个新场景

创建一个地面 Plane

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

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

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

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

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

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

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

选择物理模型

选择Sphere碰撞模型

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

例如每次吃到获得10分

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

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

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

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

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

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

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

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

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Dotnet Dancer 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档