unity3d脚本(unity3d嵌入网页)

unity3d脚本(unity3d嵌入网页)

前言

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

项目需求

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

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

场景搭建


unity3d脚本(unity3d嵌入网页)

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

-https://docs.unity.cn/cn/current/Manual/SceneViewNavigation.html,《Scene视图导航》

-https://docs.unity.cn/cn/current/Manual/class-Transform.html,《变换组件(Transform)》

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

unity3d脚本(unity3d嵌入网页)

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

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

unity3d脚本(unity3d嵌入网页)

以使平面在场景中可视。

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

unity3d脚本(unity3d嵌入网页)

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

unity3d脚本(unity3d嵌入网页)

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

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

unity3d脚本(unity3d嵌入网页)

搭载脚本

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

-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。

unity3d脚本(unity3d嵌入网页)

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

unity3d脚本(unity3d嵌入网页)

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

unity3d脚本(unity3d嵌入网页)

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

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Sphere : MonoBehaviour

{

    // Start is called before the first frame update

    void Start()

    {

    }

    // Update is called once per frame

    void Update()

    {

        float x=Input.GetAxis("Horizontal"); 

        float y=Input.GetAxis("Vertical"); //获取键盘方向键的增量

        transform.position=transform.position-new Vector3(x,0,y); //更新游戏对象的位置 

        //这里的xy符号取决于读者场景的摄像机和平面朝向

    }

}

点击按钮运行游戏,可以看到,小球可以在键盘操作下移动。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/29817.html

(0)
上一篇 2023-09-21 18:30
下一篇 2023-09-21 20:30

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注