【Unity小游戏】游戏开发案例-Unity打造畅玩无阻的小游戏(下)

击球方阵

乒乓克隆

  • 使用立方体建造竞技场、球拍和球。
  • 移动球和球拍。
  • 击球并得分。
  • 让相机感受到冲击力。
  • 给游戏一个抽象的霓虹灯外观。

这是有关基础游戏的系列教程中的第一个教程。在其中,我们将创建一个简单的 Pong 克隆。

本教程是使用 Unity 2021.3.16f1 制作的。

沿上文内容

收缩桨

作为我们游戏的最后一个行为,让我们在每次得分时缩小。这根据玩家离获胜的接近程度创建让分盘。将其当前范围转换为私有字段,并使其最小值和最大值可配置,默认情况下均设置为 4。引入了一种替换当前范围的方法,该方法还可以调整游戏对象的局部比例以匹配。**Paddle**``SetExtents

[SerializeField, Min(0f)]
float

minExtents = 4f,
maxExtents = 4f,
speed = 10f,
maxTargetingBias = 0.75f;

…

float extents, targetingBias;

…

void SetExtents (float newExtents)
{
extents = newExtents;
Vector3 s = transform.localScale;
s.x = 2f * newExtents;
transform.localScale = s;
}

根据距离赢得划桨的接近程度,在 的末尾设置范围。这是通过根据新分数除以获胜所需的分数减去 1 从最大范围到最小范围插值来完成的。为此添加所需的参数,默认情况下,该参数可以是大于 1 的任何值,当它设置为零时。SetScore

public bool ScorePoint (int pointsToWin)
{
SetScore(score + 1, pointsToWin);
return score >= pointsToWin;
}

…

void SetScore (int newScore, float pointsToWin = 1000f)
{
score = newScore;
scoreText.SetText("{0}", newScore);
SetExtents(Mathf.Lerp(maxExtents, minExtents, newScore / (pointsToWin - 1f)));
}

我们还应该在球拍唤醒时重置分数,以便在游戏的准备阶段其初始大小是正确的。

void Awake ()
{
SetScore(0);
}

让我们对底部球拍至少使用 1,对顶部球拍至少使用 3.5,以使 AI 更容易击球。

活跃的相机

随着游戏玩法的完成,让我们看看我们是否可以使游戏的呈现更加有趣。当球击中某物时,给人一种沉重的冲击感的简单方法是摇晃相机。它模拟了球员如何感觉球击中竞技场的两侧。为了进一步增加沉浸感,我们从自上而下切换到透视视图。将相机的位置设置为 (0, 20, -19),将其 X 旋转设置为 50。

【Unity小游戏】游戏开发案例-Unity打造畅玩无阻的小游戏(下)_第1张图片

推挤和推搡

要控制相机的行为,请创建组件类型。该相机可以在给定的脉冲下在 XZ 平面上推来推去,或者在 Y 维度上被推挤。这是通过给相机一个 3D 速度来实现的,该速度在 中应用,因此在所有推挤和推动帧完成后。**LivelyCamera**``LateUpdate

推挤是通过公共方法完成的,该方法通过可配置的强度增加 Y 速度,默认情况下设置为 40。推动是通过公共方法完成的,该方法带有 2D 脉冲参数,该参数被添加到速度中,由可配置的推动强度因子缩放,默认情况下设置为 1。JostleY``PushXZ

using UnityEngine;

public class LivelyCamera : MonoBehaviour
{
[SerializeField, Min(0f)]
float
jostleStrength = 40f,
pushtrength = 1f;

Vector3 velocity;

public void JostleY () => velocity.y += jostleStrength;

public void PushXZ (Vector2 impulse)
{
velocity.x += pushStrength * impulse.x;
velocity.z += pushStrength * impulse.y;
}

void LateUpdate ()
{
transform.localPosition += velocity * Time.deltaTime;
}
}

将此组件添加到主摄像机,然后提供一个配置字段并将其连接到摄像机。**Game**

[SerializeField]
LivelyCamera livelyCamera;

当在 中检测到反弹时,在执行反弹之前,使用球的速度作为脉冲进行调用。BounceXIfNeeded``PushXZ

void BounceXIfNeeded (float x)
{
fl

你可能感兴趣的:(创建小型游戏原型的系列,unity,数码相机,游戏引擎)