Unity 新建你的第一个游戏,以及如何按WASD控制角色运动 (Unity Demo2D)

news2025/1/11 10:01:52

文章目录

  • 初始化项目
  • 新建角色物体
  • 游戏资源管理
    • 试着导入资源
    • 试着管理资源
    • 试着使用资源
  • 脚本是啥
    • 新建脚本
    • 编辑脚本
    • 行为逻辑
    • 按键检测
    • 获取按键
    • 移动位置
    • ★ 最终代码 (有基础请直接跳到这)

初始化项目

当你打开 Unity Hub,初始化一个 2D 项目,进入了 Unity 编辑器,你会发现在 左侧

  • 一个叫 SampleScene (或者其他) 的场景
  • 场景下有一个 Main Camera,主相机

这就是一个新建的 2D 项目自带的内容。

在这里插入图片描述

新建角色物体

在 Main Camera 同级目录新建:2D Object - Sprites - Capsule,这里 Capsule 是精灵的种类,我们在后面都是可以自行更改的,Capsule 是胶囊形状的物体,在碰撞处理时会更润一点。

在这里插入图片描述

这里我给我的 精灵(Sprites) 命名为 PlayerObject,随后你会发现 右侧,有一大堆这个精灵的属性,比如说位置速度旋转角之类的:

  • Transform 每个游戏对象都包含一个这个组件,控制其位置、移动
  • Sprite Renderer 给精灵赋予渲染 2D 图片的能力

试着修改 PositionRotationScale 看看效果!

在这里插入图片描述

游戏资源管理

试着导入资源

低头看看下面的栏里,这里是你的游戏资源,包括脚本,图片都放这里了:

  • Assets 当前游戏使用的资源
  • Packages 通用的资源,可能别的游戏也可以用的 ( 这里可能存在误导性,请读者自行理解

所以你只需要把图片什么的往里面拖进去就是导入资源了,非常简单。

在这里插入图片描述

试着管理资源

刚刚创建出来的精灵长得确实像一个胶囊,如果不是特殊情况,玩家不应该是长那样的。

在这里我在 Assets 中新建了几个文件夹,只是一个 Demo 大概了解意思就行,不喜勿喷 (但文件管理层级确实是需要上心设计的,否则到后面会变得混乱,极其不方便使用,极其影响效率)

可以看到这里我导入了一个图片,叫 character_0001

在这里插入图片描述

试着使用资源

接下来我们直接让胶囊变成这个小怪物的样子:

也非常简单,你把你的资源里面的图片,拖到 Sprite Renderer - Sprite 里面就好了,没有多余的操作:

在这里插入图片描述

脚本是啥

如果你写过一些简单的游戏,你会写过一些脚本,比如说 碰撞检测角色移动,在 Unity 中这些脚本作为 独立的 .cs 文件 放置在资源文件夹中,当你需要这个功能时,就可以把脚本挂在某个物体上,让他实现一些能力

我们拿 碰撞检测 举例,在简单的游戏中,一个脚本代码文件就可以控制所有的游戏内容。每一帧检测:

  • 是否有碰撞到怪物
  • 碰撞到了是否结束游戏
  • 碰撞到星星给本次游戏加分
  • 渲染玩家,怪物,星星
  • 渲染屏幕上面的分数

等等诸如此类的内容。

但在 Unity 这样的较大的游戏客户端开发中,我们将会需要把这些内容完全解耦,即:

  • 每个物体都拥有一个 碰撞系统 脚本
  • 游戏的结束和开始单独由 游戏流程管理器 来实现,这个管理器可以是个单独的物体,也可以 写成一个脚本,挂载在玩家对象上
  • 加分系统单独写成一个 加分系统管理器,玩家拥有 <调用加分系统中的功能> 能力的脚本,当玩家的碰撞系统检测到星星时,就调用加分系统中的 加分销毁星星
  • 星星也有 碰撞系统,检测到 被碰撞 了就直接紫砂

如果你不这样写,那某个文件代码行数怕是要上万了。另一方面,我们也能从这种实现方式中窥见游戏性实现的可能,以便游戏的策划设计优化等等涵盖前中后期的工作。

新建脚本

也很简单,在这个地方右键然后 Create - C# Script 就可以了~

在这里插入图片描述

编辑脚本

我们可以使用 Visual Studio 或者 VSCode 进行 C# 脚本的编辑,多数人使用 Visual Studio,工具链更完善。

如果您对如何使用更轻量的 VSCode 感兴趣,可以参考我的另一篇笔记:如何使用 VSCode 编辑 Unity + C# 脚本

打开你刚刚创建的脚本 (如果你使用VS,文本内容也是一样的,这者没有实质上的区别):

  • Start() 当脚本被初始化完毕时执行的
  • Update() 每一帧都会执行的
    在这里插入图片描述

行为逻辑

由于我们使用的是 2D 模板,此时我们的 PlayerObject 也没有挂载重力系统,碰撞体系统,那么想让 PlayerObject 移动无非是修改玩家的位置 (x, y, z)

参考一下大多数游戏的流程:按下A,玩家往左走

所以有可能初学者会认为:写一个函数来检测按下A,当玩家按下A的时候,玩家开始往左走

就目前我们仅有2个函数块 StartUpdate,不涉及线程池等等操作的话,显然这样是不容易实现的,一个可能的正确的方式是:每一帧都检测玩家是否按下了某个按键,如果按着就移动一点点

按键检测

我们会需要一个 Unity 提供给我们的静态类 (Static Class),或者叫做工具类 (Utils),这个类是 Input,专门用来读取按键输入,这里需要您具有面向对象编程经验:

键入 Input,通过智能提示可以发现这个静态类中提供的实现:

在这里插入图片描述

获取按键

通过这个函数会返回某个按键是否处于按下状态 (bool)

Input.GetKey(KeyCode.A)

那么我们只需要这样就可以不停获取 A 的按键信息了

void Update() {
	bool isKeyDown = Input.GetKey(KeyCode.A);
}

移动位置

这里我们需要用到 PlayerObject 对象自带的组件 transform,这样调用来实现对象的 移动

  • Time.deltaTime 是这一帧渲染所经历的时间,这样在不同游戏帧数下,对象的移动速度才会一致(参考 Terraria 的跳帧算法)
  • Translate() 的三个参数分别是 x, y, z,你也可以输入一个 Vector 或者别的,详见 Translate 的函数原型
transform.Translate(1.0f * Time.deltaTime, 0, 0);

★ 最终代码 (有基础请直接跳到这)

这就是最终实现功能的代码:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/561522.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能TensorFlow MNIST手写数字识别——训练篇

上期我们分享了CNN的基本结构,本期我们就拿MNIST数据集来训练一下手写数字的数据库,以便我们下期能够使用训练好的模型,来进行手写数字的识别。 分享一下几个可视化网站,可以看到神经网络的识别过程。 http://scs.ryerson.ca/~aharley/vis/conv/ 1、插入MNIST数据集 #利…

Java安全和防护:如何保护Java应用程序和用户数据的安全

第一章&#xff1a;引言 在当今数字化时代&#xff0c;Java已经成为主流的编程语言之一。无论是企业级应用程序还是个人项目&#xff0c;Java应用程序都承载着大量的敏感数据和业务逻辑。然而&#xff0c;随着网络攻击日益猖獗&#xff0c;保护Java应用程序和用户数据的安全变…

Java-API简析_java.lang.Package类(基于JDK1.8)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/130806567 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

什么是 Spring?为什么学它?

前言 欢迎来到本篇文章&#xff01;在这里&#xff0c;我将带领大家快速学习 Spring 的基本概念&#xff0c;并解答两个关键问题&#xff1a;什么是 Spring&#xff0c;以及为什么学习 Spring。 废话少说&#xff0c;下面&#xff0c;我们开始吧&#xff01; Spring 官方文档…

MySQL索引详解(IT枫斗者)

MySQL索引详解 什么是索引 官方介绍索引是帮助MySQL高效获取数据的数据结构。简单来讲&#xff0c;数据库索引就像是书前面的目录&#xff0c;能加快数据库的查询速度。事实上&#xff0c;索引是一种数据结构&#xff0c;用于帮助我们在大量数据中快速定位到我们想要查找的数…

chatgpt赋能Python-python_pyyaml

Python与PYAML的SEO 介绍 在当今以数据为中心的时代&#xff0c;数据的存储、传输和处理出现了许多新的挑战。Python作为一门强大的编程语言&#xff0c;已经成为数据处理的利器。而PYAML则是Python中一款重要的yaml库。 YAML与PYAML YAML&#xff08;YAML Ain’t Markup L…

语法速通 uni-app随笔【uni-app】【微信小程序】【vue】

1、微信小程序 1.1、wx 小程序 工程目录 其中&#xff0c; pages目录/index目录【必有】&#xff1a; index.js 编写业务逻辑 【初始数据&#xff0c;生命周期函数】 index.json 编写配置 index.wxml 编写模板 【可理解为本页html】 index.wxss 【可理解为本页css】 1.2、wx…

The Development of DBMS in History--人工翻译

导言 数据库类型 &#xff0c;有时称为数据库模型或数据库族&#xff0c;是用于在数据库管理系统内组织数据的模式和结构。多年来已经开发了许多不同的数据库类型。一些主要是当前数据库的历史前辈&#xff0c;而另一些则经受住了时间的考验。在过去的几十年中&#xff0c;新的…

chatgpt赋能Python-python_plot散点图

Python Plot散点图&#xff1a;详细介绍与使用教程 Python是一种广泛使用的编程语言&#xff0c;特别适合处理数据科学任务。Python有大量的用于数据可视化的库&#xff0c;其中matplotlib是最重要的之一。在本文中&#xff0c;我们将探讨matplotlib中的散点图plot&#xff0c…

[ 云计算 Azure ] Chapter 07 | Azure 网络服务中的虚拟网络 VNet、网关、负载均衡器 Load Balancer

本系列已经更新文章列表&#xff08;已更新&#xff09;&#xff1a; [ Azure 云计算从业者 ] Chapter 03 | 描述云计算运营中的 CapEx 与 OpEx&#xff0c;如何区分 CapEx 与 OpEx[ Azure 云计算从业者 ] Chapter 04 | Azure核心体系结构组件之数据中心、区域与区域对、可用区…

什么是智能合约存储布局?

本指南将解释智能合约中存储的数据。合约存储布局是指控制合约存储变量在长期内存中排布的规则。 读者先决条件知识 以下一般先决条件有助于理解本文&#xff1a; 熟悉面向对象的语言 位和字节 十六进制 智能合约 以太坊虚拟机&#xff08;EVM&#xff09; 哈希 无符号整数 静态…

图像噪声类别

什么是图像噪声&#xff1f; 图像噪声是图像在获取或是传输过程中受到随机信号干扰&#xff0c;妨碍人们对图像理解及分析处理 的信号。 图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量&#xff0c;图像在传输过程中产 生图像噪声的主要因素是所用的传输信道…

chatgpt赋能Python-python_quad

Python quad是什么&#xff1f; 在Python编程中&#xff0c;Quad是指四元组的缩写。它是一个包含四个元素的有序组。Quad通常在图形学和计算机图像处理中广泛应用。 在Quad中&#xff0c;每个元素都可以是数字或点的组合。 在Python编程中&#xff0c;quad被广泛用于三维计算机…

我最近的练习一些全栈项目

嘿&#xff0c;大家好&#xff01;作为一个程序员&#xff0c;我突然出现在这里&#xff0c;就像程序里的一个Bug一样突兀。我知道我很久没有发博客了&#xff0c;你们一定在想&#xff0c;这家伙是被代码迷宫困住了还是被Bug们抓走了&#xff1f;实际上&#xff0c;我一直忙于…

一文读懂:什么是数组

大家好&#xff0c;我是三叔&#xff0c;很高兴这期又和大家见面了&#xff0c;一个奋斗在互联网的打工人。 什么是数组 Java是一种面向对象的编程语言&#xff0c;提供了许多数据结构来处理和组织数据。其中&#xff0c;数组是一种常见且强大的数据结构&#xff0c;是存放在…

python+mysql电影推荐系统 影院售票选座系统vue

随着互联网的蓬勃发展&#xff0c;现代社会进入了以计算机为中心的信息时代&#xff0c;计算机技术正以一种前所未有的持久方式改变着世界的面貌。应用网络技术电影推荐系统受到许多用户的重视。网站的开发可以对人们的交流起到重要的作用&#xff0c;因此&#xff0c;为了满足…

印象笔记导出HTML再转markdown的方法

前言 我已经使用6年印象笔记了&#xff0c;越来越依赖它了&#xff0c;现在已经有6000多条笔记了&#xff0c;我就想着如果某一天印象笔记没了&#xff0c;那我这些心血就都没了&#xff0c;所以我想要把笔记全部转为markdown格式&#xff0c;然后自己存储起来。可以选择用百度…

chatgpt赋能Python-python_pendulum

Python Pendulum: 了解更便捷的时间操作 在我们的日常生活中&#xff0c;对于时间的操作极为频繁&#xff0c;不仅仅是时钟和日历&#xff0c;还包括计划、调度等等。Python pendulum正是一个极为优秀的工具&#xff0c;它为我们的时间操作提供了更为灵活且方便的使用体验。 …

chatgpt赋能Python-python_plt_坐标轴

Python plt 坐标轴详解 介绍 在数据可视化领域中&#xff0c;matplotlib.pyplot是一款十分流行的python库。它支持绘制各种类型的图表&#xff0c;例如散点图、折线图、柱状图、饼图等。在绘制各种图表时&#xff0c;一个重要的因素就是如何调整和修改坐标轴以展示数据。本文…

chatgpt赋能Python-python_put

Python PUT&#xff1a;了解PUT请求 介绍 在RESTful API中&#xff0c;PUT请求用于更新资源&#xff0c;它是一种向服务器提交指定资源的请求方法。Python是一种流行的编程语言&#xff0c;其标准库中包含了支持基本HTTP协议的模块。Python的requests库是使用最广泛的HTTP库之…