unity游戏开发之赛车游戏
在这个 unity 2d 赛车游戏教程中,我将构建一款移动超休闲赛车游戏。
这将是一个简单的 unity 2d 汽车游戏。所以这将需要有一个可以无限滚动的背景。
我们需要避开一些障碍。一些评分系统。
以及一种使用我们的手机加速度计控制我们的汽车的方法。然后,我们将实施 Unity 广告,通过应用商店的游戏获利。
以下是我们将要构建的游戏的基本模型设计。
Unity 2D 赛车游戏模型
所以我们有一些路障标志。我们需要避免的坑洼。一条我们行驶而不能离开的路。
我们的黄色汽车将成为我们玩家的汽车,它将躲避各种障碍物。
我们有一些头顶云,这使得看到物体更具挑战性。
让我们从一个空白的新 Unity 项目开始。
创建 unity2d 赛车游戏项目
从 2D Unity 项目开始。
新的 Unity Racing 游戏项目
让我们首先设置我们的场景以适应我们的移动屏幕。单击 Game (游戏)。
我们不需要添加适合移动设备的纵横比。因此,请继续添加一个新的纵横比,即 9:16 的纵向。
为此,请单击 Free Aspect 获得这样的下拉菜单。
单击底部的加号以添加纵横比。
接下来,我们希望将游戏的构建设置配置为纵向模式。因此,请前往构建设置。
然后单击播放器设置,以便我们可以更改为纵向。
将下面的选项更改为 portrait(纵向)。
这应该使您的项目准备好构建到移动设备。现在让我们开始让我们的游戏开始工作的第一部分。我们需要创建一个背景。
我们的 Unity 赛车游戏的滚动背景
首先创建一个 3D 四边形,我们可以在场景中使用它来为背景添加纹理。
将其重命名为 Background 并调整其大小以适应视口或场景大小,如下所示。
Unity 2D 赛车游戏教程背景
接下来,获取您的背景 sprite 并将其拖动到四边形上。得到这样的东西。
现在,我们想要添加一个光源来照亮我们的场景,因此在层次结构中右键单击,然后单击并创建一个定向光源。
完成后,您应该让您的背景像这样亮起。
Unity 2D 赛车游戏教程 – Light for Road
完成此操作后,我们需要调整一些设置,首先,我们需要将 sprite 更改为重复的 sprite。
为此,请转到您的项目选项卡,然后单击 road.png 文件。
然后在右侧确保更改下面屏幕截图中的设置,然后单击 使用 完成后。
太好了,现在我们开始了。我们现在只需要创建一个脚本来控制我们的背景滚动。
我们将向脚本添加一些额外的选项,以允许我们滚动其他项目。
继续创建一个名为 scripts 的新文件夹。
完成后,再次右键单击并创建一个名为 ScrollingBackground.cs 的新 c# 脚本。
我们的脚本将如下所示。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ScrollingBackground : MonoBehaviour
{
Renderer rend;
public float scrollSpeed = 10.5f;
public bool xAxis;
// Start is called before the first frame update
void Start()
{
rend = GetComponent<Renderer>();
}
// Update is called once per frame
void Update()
{
float offset = Time.time * scrollSpeed;
if (!xAxis)
{
rend.material.SetTextureOffset("_MainTex", new Vector2(0, offset));
} else
{
rend.material.SetTextureOffset("_MainTex", new Vector2(offset,0));
}
}
}
首先,我们声明一个渲染器,它将允许我们访问我们的 Quads 材质。然后我们设置一个 scrollSpeed 并添加一个 xAxis 布尔值。
这样我们就可以控制我们将滚动的方向。在 start 方法中,我们将获取 renderer 组件并将其分配给 rend。
然后最后在我们的 update 方法中,我们将计算我们的偏移量,这需要我们的时间并将其乘以我们的滚动速度。然后,我们检查我们正在滚动的轴,并在该轴上应用纹理偏移。
准备好脚本后,请继续将其拖放到 Background quad 上,如下所示。
我已将滚动速度设置为 1 以使其具有合理的滚动速度。如果你做对了所有事情,你应该最终得到这个。
使用与滚动背景类似的概念添加云
所以让我们快速作为另一个简单的效果。让我们添加滚动云。因此,再次向场景添加新的四边形。
叫它云。然后继续将 clouds.png 拖放到四边形上,使其如下所示。
如果您的云看起来不是这样的,您可能需要调整您的云材质。前往 materials 文件夹。
然后继续选择您的云材质。
在右侧,您需要选择渲染模式淡化,如下所示。
返回一个文件夹并选择您的云,并确保您重复选择并单击应用。
然后,只需将 ScrollingBackground 脚本拖到四边形上,并选中 xAxis 复选框。使用我在下面使用的设置。
如果你做对了所有事情,你最终会得到这个。
太好了,接下来我们需要为我们的游戏创建 car 控制器。
为我们的 Unity 2D 游戏创建汽车控制器
我们要做的第一件事是将我们的汽车带入我们的场景。因此,转到 car.png 文件并将其拖动到层次结构中。
调整其大小以适应游戏,如下所示。
排序图层的重要性
在我们尝试控制播放器之前,让我们修复所有的排序层。为此,请单击层次结构中的 car 对象。
在右侧,您要查找此选项。
单击下拉列表,然后单击 Add sorting layer。
创建这些排序图层,然后像这样通过上下拖动它们来重新排列它们。
完成后,我们想要分配它们,因此再次单击您的汽车并将您的排序图层更改为此
Unity 2d Car 控制器脚本
要开始使用我们的脚本,您需要将 Rigidbody2D 添加到您的汽车中。为此,请单击层次结构中的汽车。
然后在右侧单击 add component。然后搜索 rigidbody2d 并添加它。
接下来,我们需要确保 rigidbody2d 是一个运动学体。因此,在右侧,请确保您的设置如下所示。
Unity 2D 汽车控制器 Kinematic Body
太好了,现在我们可以创建我们的 car controller 脚本了。为此,请进入您的 scripts 文件夹,然后右键单击并创建一个名为 PlayerController 的 c# 脚本。打开 cs 文件并将其放入其中。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private Rigidbody2D rb;
public float moveSpeed = 1.0f;
private float direction;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
direction = Input.GetAxisRaw("Horizontal");
}
private void FixedUpdate()
{
rb.velocity = Vector2.zero;
rb.velocity = new Vector2(direction * Time.fixedTime * moveSpeed, 0);
}
}
所以这是脚本的工作原理。首先,我们将 rigidbody2d 声明为 rb。然后我们声明 movespeed 和 direction。
这些将控制我们前进的方向和速度。在 start 方法中,我们初始化了 rigidbody2d 组件。
然后,在我们的 update 方法中,我们在水平轴上使用 GetAxisRaw 方法获取方向。
这也将使我们能够使用移动设备的传感器来控制我们的汽车。然后在 FixedUpdate 方法中,我们将速度归零,这样我们就不会有加速度。
最后,我们使用输入中的 fixedTime、moveSpeed 和 direction 在 x 轴上应用速度。
最后,将其拖到您的汽车上并使用我的设置,如下所示。
如果一切都正确完成,您现在应该能够点击播放并结束它。如果您按左右箭头键,您应该能够移动汽车。
接下来,让我们添加一个基本的 UI 菜单,我们可以使用它来玩游戏。
Unity 2D 赛车游戏,创建菜单
为了为我们的游戏创建菜单,我们首先需要创建一个新场景。所以去文件,然后点击新场景。
如果在 Mac 上,请按 ctrl+s 或 cmd+s 并将其保存为 菜单.
因此,我们将创建一个非常简单的菜单,如下所示。
为此,首先,我们要引入一个画布。因此,在您的层次结构中,右键单击并创建一个画布。
现在,我们的画布不会是合适的尺寸,目前您可能会看到类似这样的东西。
我们的画布没有正确调整为相机的大小,因此要解决此问题,我们想进行一些更改。因此,单击左侧的画布。
然后在右侧进行以下更改。
确保将场景的主摄像机拖动到渲染摄像机插槽中。
现在让我们添加一个按钮,在左侧右键单击画布,然后单击 create 按钮。
现在你应该有这样的东西。
单击文本,然后继续更改右侧按钮的文本。
现在为了装饰,我把汽车和我们的道路背景拖进去,如下所示。
为了得到这个。
太好了,现在我们需要一种方法来管理我们的 UI。因此,为此,我们将创建一个 UIManager 脚本。所以去你的 scripts 文件夹。
自己创建一个 UIManager c# 脚本。
因此,在 Visual Studio 中打开它,并将此代码粘贴到其中。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class UIManager : MonoBehaviour
{
public void StartGame()
{
SceneManager.LoadScene("Main");
}
}
所以很简单,重要的是你不要忘记引入 UnityEngine.SceneManagement。
完成后,我们创建一个公共方法 StartGame,然后在其中我们只需加载我们的主场景。
完成此操作后,只需将其拖放到画布游戏对象上,如下所示。
接下来,我们需要将按钮附加到 StartGame 函数。因此,要执行此操作,请单击层次结构中的 Button。
在 Inspector 的右侧,我们现在需要附加一个游戏对象。因此,请将您的画布拖放到您的点击槽中。
完成后,单击 无功能 下拉列表。转到 UI 管理器并单击 start game 方法。
现在继续点击 unity 播放/运行按钮。那么你应该有这个。
这就是我们现在需要的菜单和 UI 的全部内容。接下来,我们需要继续创建我们的障碍。
Unity 2d 赛车游戏:生成对象和障碍物
您现在要返回并确保打开主场景。所以到这里双击。
让我们把坑洼带入有危险的地方。因此,将坑洼拖到场景中,确保将其大小缩小以适应游戏,就像这样。
我们现在要做的是添加一个 rigidbody2d 和一个碰撞器。为此,请添加 rigidbody2d 和碰撞器,如下所示。确保您也具有相同的设置。
现在您已经有了这个,我们需要一种方法来移动道路上的坑洼,使其与我们的背景滚动速度相匹配。
因此,为了简单起见,我们现在将创建一个 Hazard.cs 脚本。继续将其添加到 scripts 文件夹,并在 Visual Studio 中打开它。
所以现在我们要保持非常简单。我们将以我们可以设置的固定速度在 x 轴上移动它。
这是我们的脚本。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Hazard : MonoBehaviour
{
public float moveSpeed = 10f;
private Rigidbody2D rb;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void FixedUpdate()
{
rb.velocity = Vector2.zero;
rb.velocity = new Vector2(0, moveSpeed * Time.fixedDeltaTime * -1);
}
}
所以又很简单。我们有一个移动速度,刚体。在 start 中,我们初始化我们的刚体。
Fixed Update 将我们的速度归零,然后将我们的 movespeed 与我们的 time.fixedTime 相乘,并将其乘以 -1。继续将其连接到您的坑洼并添加此 moveSpeed。
所以现在你应该有这样的东西。
太好了,所以现在我们需要做的就是为我们的汽车添加一个碰撞器,以便我们可以检测碰撞。因此,要执行此操作,请单击左侧的汽车并添加一个 2d 盒形碰撞器。
现在,我们需要处理碰撞,在 Visual Studio 中再次打开 CharacterController 脚本,并添加以下代码。
private void OnTriggerEnter2D(Collider2D collision)
{
Time.timeScale = 0;
Destroy(gameObject);
}
Time.timeScale 0 将暂停我们的游戏,而 Destroy 将杀死我们的玩家。OnTriggerEnter2D 将检测我们何时发生碰撞并在其中运行代码。
所以现在一切都很好,但是我们如何重新开始我们的游戏。为此,我们将再次添加一些 UI,并使用 UIManager 重新加载我们的场景。
因此,首先让我们添加一个由摄像机渲染的画布,就像我们之前学习的那样,并添加一个按钮。像下面这样设置你的。
你现在应该得到这样的东西。
Unity 2D 赛车游戏重启游戏
将您的 Canvas 重命名为 RestartMenu,然后通过取消选中此框在右侧禁用它。
在我们的 CharacterController 脚本中,我们想要添加以下代码。
public Canvas RestartMenu;
保存它。单击左侧的汽车,然后将重新启动菜单拖到插槽中,如下所示。
现在,在我们的 CharacterController 的 OnTrigger 函数中添加这个。
private void OnTriggerEnter2D(Collider2D collision)
{
Time.timeScale = 0;
RestartMenu.gameObject.SetActive(true);
Destroy(gameObject);
}
如果您玩游戏并且玩家死亡,您现在应该会弹出菜单。
因此,在我们的 UIManager 脚本中,我们已经有一个将启动游戏的函数,因此我们可以简单地将 UIManager 脚本拖放到我们的 RestartMenu 对象上,就像这样。
在你的 UIManager 中,你只需要将此代码添加到 StartGame 函数中,即可重置我们的时间刻度。
Time.timeScale = 1;
和以前一样,单击左侧的重新启动按钮并附加 StartGame 函数。
确保将 RestartMenu 拖到插槽中,否则它将不起作用。
太好了,您现在应该有一个正常运行的重启菜单。
所以这几乎总结了如何添加障碍物并杀死玩家。您现在可以轻松地重新创建更多障碍。
现在,我们将研究如何实施观看广告以实现货币化。
在我们的游戏中实施 Unity Ads
为此,让我们在 RestartMenu 中添加一个基本按钮,该按钮将包含文本观看广告。因此,您的层次结构应如下所示。
Unity 2D 赛车游戏教程 – 观看广告菜单设置
您现在想要打开 Unity Asset Store 并搜索 unity 货币化。
下载并安装此 Asset Pack。
从这里添加 Unity 的 Video Rewards 广告非常容易。这是他们在网站上提供的代码,运行良好。
创建名为 RewardedAdsButton 的脚本。将此代码添加到此脚本中,并将此脚本拖放到我们的 Watch Ad 按钮上。
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Advertisements;
[RequireComponent (typeof (Button))]
public class RewardedAdsButton : MonoBehaviour, IUnityAdsListener {
#if UNITY_IOS
private string gameId = "1486551";
#elif UNITY_ANDROID
private string gameId = "1486550";
#endif
Button myButton;
public string myPlacementId = "rewardedVideo";
void Start () {
myButton = GetComponent <Button> ();
// Set interactivity to be dependent on the Placement’s status:
myButton.interactable = Advertisement.IsReady (myPlacementId);
// Map the ShowRewardedVideo function to the button’s click listener:
if (myButton) myButton.onClick.AddListener (ShowRewardedVideo);
// Initialize the Ads listener and service:
Advertisement.AddListener (this);
Advertisement.Initialize (gameId, true);
}
// Implement a function for showing a rewarded video ad:
void ShowRewardedVideo () {
Advertisement.Show (myPlacementId);
}
// Implement IUnityAdsListener interface methods:
public void OnUnityAdsReady (string placementId) {
// If the ready Placement is rewarded, activate the button:
if (placementId == myPlacementId) {
myButton.interactable = true;
}
}
public void OnUnityAdsDidFinish (string placementId, ShowResult showResult) {
// Define conditional logic for each ad completion status:
if (showResult == ShowResult.Finished) {
// Reward the user for watching the ad to completion.
} else if (showResult == ShowResult.Skipped) {
// Do not reward the user for skipping the ad.
} else if (showResult == ShowResult.Failed) {
Debug.LogWarning (“The ad did not finish due to an error.”);
}
}
}
所以,让我试着解释一下这里发生了什么。我们有预处理器块,它将决定我们将用于 Android 和 IOS 的 unity 广告 ID。
然后,我们有一个 button 变量来保存我们的 watch ad 按钮。然后,该按钮将准备就绪,并在广告系统初始化后可供点击。
然后,我们向按钮添加一个点击侦听器,该按钮将触发 showrewardedvideo 函数,该函数仅显示广告。
OnUnityAdsReady 将检查广告系统何时准备好启用我们的按钮。OnUnityAdsDidFinish 有几个块,其中一个已经完成,如果您想奖励您的玩家,这就是您可以这样做的地方。
跳过和失败,你不会奖励他们。这基本上就是展示广告所需的代码。如果您正确地执行此操作,则当您单击“观看广告”时,将最终看到此消息。
就是这样,这就是您可以使用货币化和 UI 菜单从头开始实现 Unity 2D 赛车游戏的方法。
一些常见问题
如何制作赛车游戏?
您可以使用 Unity 游戏引擎轻松创建赛车游戏。尤其是 2d 赛车游戏。您可以使用在 inkscape/aseprite 中制作的一些图形并使用少量代码将游戏组合在一起来轻松制作。
如何制作无限滚动背景?
通常,要在游戏中制作无限滚动背景,您需要使用具有重复背景的纹理偏移。
如何制作 unity 2d 游戏?
您可以制作带有一些像素艺术的 Unity 2D 游戏,然后使用 Unity 动画系统和 c# 脚本轻松构建基本的 2D 游戏。
如何制作一款超棒的赛车游戏?
你能为你的赛车游戏做的最好的事情就是有一个引人入胜的游戏叙事。还可以添加特殊效果,例如烟雾、火焰和您通常会在赛车中看到的其他效果。这只会让您的赛车游戏焕然一新。
如何创建飙车游戏?
如果您为移动设备构建此游戏,这将类似于在横向模式下运行的无限跑步者机制。因此,您只需在游戏引擎中以横向模式创建一个场景,并使用输入将物理效果应用于各种汽车。
本文章来源于Unity 2D 赛车游戏教程