计数器在应该减少1的情况下减少一半
本文关键字:情况下 少一半 计数器 | 更新日期: 2024-10-19 21:50:05
我正在Unity引擎中进行一个项目,遇到了一个我无法理解的问题。我有一个弹药计数器,每当玩家点击鼠标左键时,它会将可用弹药量减少1。然而,它并没有这样做,而是减少了一半(四舍五入)。我不完全确定为什么会发生这种情况,因为唯一递减的值是"ammonCount-=1;"我的脚本代码如下:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class ShootGun : MonoBehaviour {
public Text Ammo;
public int ammoCount = 30;
void FixedUpdate ()
{
if(Input.GetButtonDown("Fire1"))
{
for(int i = 1; i <= ammoCount; i++)
{
ammoCount -= 1;
Debug.Log ("Ammo remaining: " + ammoCount);
Ammo.text = " " + ammoCount;
Vector3 gunRayOrigin = transform.position;
float gunRayDistance = 50f;
Ray gunRay = new Ray ();
gunRay.origin = gunRayOrigin;
gunRay.direction = Vector3.down;
if(Physics.Raycast(gunRayOrigin, gunRay.direction, gunRayDistance)) {
Debug.Log("Bullet Hit");
}
}
}
}
}
任何帮助都将不胜感激,因为我仍在掌握C#的窍门。
您正在for循环中递减它。
如果我们简化为:
for(int i = 1; i <= ammoCount; i++)
{
ammoCount -= 1;
}
并获得初始弹药计数6,当你第一次进入循环时:
i = 1, ammoCount = 6
但是你从弹药计数中减去一,循环加一到i。所以下一个循环你有
i = 2; ammoCount = 5
但是你从弹药计数中减去一,循环加一到i。所以下一个循环你有
i = 3; ammoCount = 4
但是你从弹药计数中减去一,循环加一到i。所以下一个循环你有
i = 4; ammoCount = 3
循环完成(因为现在i<=ammonCount不再为真)。弹药数量是原来的一半。
看起来像Input.GetButtonDown("Fire1")只有在按下并释放按钮时才会返回true,所以这是一个"按下按钮并发射所有弹药"的场景,而不是"发射直到弹药耗尽或释放钥匙"。
所以你想让它继续发射,而还有弹药(提示提示)。
您正在for
循环中递减计数器。通过减少循环的上限并增加迭代变量i
,基本上将上限(ammoCount
)减半。
在这种情况下,我看不出为什么需要循环。
FixedUpdate
是一个以固定间隔发生的事件,应该主要用于处理物理的场景。我不认为是这样(有些人可能会说你在使用光线投射,但我个人不确定这是否有效)。您想对用户按钮的按下做出反应,所以在我看来,您应该使用Update
事件。
如果用户按下并释放按钮,则GetButtonDown()
返回true。相反,您应该使用GetButton()
来了解按钮是否按下。如果是,继续开火,如果不是,什么也不做。否则,你必须反复按下按钮,这可能又不是你想要的行为。
现在让我们看看当你按下按钮时会发生什么。每次用户执行该操作时,您都会开始减少弹药数量,直到弹药数量为零。不确定你在创造什么样的游戏,但这听起来不对。相反,我所期望的是在用户按下按钮时减少while
的计数。在更新事件中,只需检查弹药数量是否高于零,如果是,则进行光线投射检查是否命中。
它看起来是这样的:
void Update()
{
if(Input.GetButton("Fire1"))
{
if (ammoCount > 0)
{
ammoCount--;
// do raycast and so on
}
}
}