【发布时间】:2021-08-22 01:09:42
【问题描述】:
我是 Unity 的初学者,虽然我没有太多的编码经验,但我知道我的代码一团糟。
所以,事情是这样的:我插入了一个特定的功能,当我单击鼠标 (0) 时,它允许玩家从它的位置 Lerp 到“Object1”。单击时,时间计数器启动,在 2 秒内,如果我再次单击鼠标(0),它将使玩家第二次,现在到“Object2”。如果每个 Input 都在 5 秒以下,我应用这个逻辑的方式允许用户对 Player 进行 4 次 Lerp 到 4 个不同的位置。
经过大量努力,我找到了一种让它工作的方法,它是功能性的,但代价是许多布尔值和 ifs 语句,一个完整而糟糕的 Spaguetti。所以我向你们提出的问题是,我怎样才能让这整个混乱变得更加干净和高效?在这种情况下,我可以使用哪些代码结构来使整个内容更具可读性,并切断大量的布尔值和条件?提前谢谢大家!
代码如下:
[SerializeField] private Transform cube1;
[SerializeField] private Transform cube2;
[SerializeField] private Transform cube3;
[SerializeField] private Transform cube4;
private float timer;
private bool canCount;
private bool click1;
private bool click2;
private bool click3;
private bool click4;
private bool lerp1;
private bool lerp2;
private bool lerp3;
private bool lerp4;
private void CountDown()
{
if (canCount)
{
timer += Time.deltaTime;
if (timer >= 2)
{
canCount = false;
Debug.Log("Timer End");
}
}
}
private void Lerp()
{
if (lerp1)
{
transform.position = Vector3.Lerp(transform.position, cube1.position, Time.deltaTime * 10);
}
if (lerp2)
{
transform.position = Vector3.Lerp(transform.position, cube2.position, Time.deltaTime * 10);
}
if (lerp3)
{
transform.position = Vector3.Lerp(transform.position, cube3.position, Time.deltaTime * 10);
}
if (lerp4)
{
transform.position = Vector3.Lerp(transform.position, cube4.position, Time.deltaTime * 10);
}
}
private void Update()
{
CountDown();
Lerp();
if (Input.GetMouseButtonDown(0))
{
if (!canCount)
{
click1 = true;
click2 = false;
click3 = false;
click4 = false;
lerp2 = false;
lerp3 = false;
lerp4 = false;
if (click1)
{
click1 = false;
click2 = true;
lerp4 = false;
lerp1 = true;
timer = 0;
canCount = true;
}
else if (click2 && canCount)
{
click2 = false;
click3 = true;
lerp1 = false;
lerp2 = true;
timer = 0;
}
else if (click3 && canCount)
{
click3 = false;
click4 = true;
lerp2 = false;
lerp3 = true;
timer = 0;
}
else if (click4 && canCount)
{
click4 = false;
click1 = true;
lerp3 = false;
lerp4 = true;
timer = 0;
}
}
else
{
if (click1)
{
click1 = false;
click2 = true;
lerp4 = false;
lerp1 = true;
timer = 0;
canCount = true;
}
else if (click2)
{
click2 = false;
click3 = true;
lerp1 = false;
lerp2 = true;
timer = 0;
}
else if (click3)
{
click3 = false;
click4 = true;
lerp2 = false;
lerp3 = true;
timer = 0;
}
else if (click4)
{
click4 = false;
click1 = true;
lerp3 = false;
lerp4 = true;
timer = 0;
}
}
}
【问题讨论】:
标签: c# unity3d if-statement boolean lerp