当前位置:   article > 正文

Unity游戏教程初步(二):场景搭建与创建脚本_创建一个场景,创建一个平面作为地面,编写脚本,实现单击鼠标右键将场景默认的

创建一个场景,创建一个平面作为地面,编写脚本,实现单击鼠标右键将场景默认的

目录

前言

项目需求

场景搭建

搭载脚本


前言

在接下来的若干节中,我们通过搭建并逐步完善一个3D小demo《Roll a ball》初步掌握Unity3D中的场景构建等内容。

项目需求

我们的目标是在unity的3D预设下搭建一个小游戏demo,游戏内容为控制小球从场景的起点滚动到终点。

在本节中,我们需要构建一个平台和一个小球,并使得小球能够根据键盘操作进行相应的移动。

场景搭建

-本节相关内容请读者参考

-Scene 视图导航 - Unity 手册Scene视图导航

-变换组件 - Unity 手册,《变换组件(Transform)》

新建一个3D预设的项目,如图所示:

可以看到,现在场景中的画面空空如也,只有一个摄像机(Main Camera)和一个光源(Directional Light)。Game选项卡里显示的即是通过摄像机看到的场景。

在场景中新建一个3D Object Plane(3D平面),鼠标在Hierarchy选项卡右击->3D Object->Plane。创建之后无法在画面中看见平面,是因为其厚度为无限小,在正视图中不可见。调整场景视图辅助图标

以使平面在场景中可视。

调整之后的界面如下所示,可以看到,虽然平面在场景中可视,却无法在游戏预览(Game)中可视。这是因为游戏主摄像机的角度与场景的角度不同(可以将场景视图比作上帝视角,游戏视图就是玩家视角,两者自然不是一个视角。游戏中的视角只取决于主摄像机的视角)。

选中Main Camera,可以看到有两条白线从其原点射出(其实是四条白线,代表一个四棱锥,为摄像机的视野)。用工具调整Main Camera的角度和位置,使平面整个出现在游戏视野内。

在场景中新建一个Sphere(球体),鼠标在Hierarchy选项卡右击->3D Object->Sphere。调整其位置,使得其正好停留在平面上,且居于平面中心。这种调整由于要求比较精细,并且调整过程中不能很好地使用肉眼校正,所以我们不使用视图工具,而是通过调整游戏对象的transform组件属性来调整其位置。

Transform组件一共有三个属性,它们的含义如下所示。分别查看球体与平面的transform,并将球体的position属性调整到与平面相同的水平。此时,由于球体与平面的中心点位置相同,球体表现为一半嵌入在平面中。根据其坐标轴,继续调整球体的位置(对应位置坐标轴+球体的Scale值/2,默认为0.5)。

搭载脚本

-本节相关内容请读者参考

-https://docs.unity.cn/cn/current/ScriptReference/MonoBehaviour.html,《MonoBehaviour

-https://docs.unity.cn/cn/current/ScriptReference/Input.GetAxis.html,《Input.GetAxis

为了使得球体能够响应键盘操作滚动,我们需要给球体附加一个Script(脚本)组件,并且编写搭载的C#脚本。

选中球体,点击Inspector选项卡最下面的Add Component按钮,为球体添加一个组件。添加组件后,unity会创建一个C#空脚本文件,并让你取一个名字。我们命名其为Sphere。

双击Project选项卡中出现的脚本文件,由于unity默认的脚本编辑器是VS,如果读者电脑中有VS,unity将会用VS打开脚本文件。默认脚本编辑器在Edit->Preferences->External Tools中修改,但是不建议有VS的读者修改,因为VS不需要额外设置就可以联合调试Unity脚本。

打开后的脚本如图所示,可以看到这是一个继承自MonoBehaviour的类,并且有两个空函数Start与Update。如同注释所言,Start函数在第一次启动时被调用,Update在游戏更新每一帧时调用。

改写脚本,如下,其中Vector3是unity对于三维向量和点的类:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class Sphere : MonoBehaviour
  5. {
  6. // Start is called before the first frame update
  7. void Start()
  8. {
  9. }
  10. // Update is called once per frame
  11. void Update()
  12. {
  13. float x=Input.GetAxis("Horizontal");
  14. float y=Input.GetAxis("Vertical"); //获取键盘方向键的增量
  15. transform.position=transform.position-new Vector3(x,0,y); //更新游戏对象的位置
  16. //这里的xy符号取决于读者场景的摄像机和平面朝向
  17. }
  18. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/97988
推荐阅读
相关标签
  

闽ICP备14008679号