我正在尝试在 Unity 上的游戏中添加一个系统,以便玩家能够拾取弹药箱,并在拾取时随机生成一个值。然后,我希望在我的手枪脚本中使用这个随机生成的数字,将其添加到枪的当前弹药变量中。
下面是玩家与弹药箱交互时对弹药箱进行操作的脚本 I。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using static UnityEngine.Random;
public class AmmoController : MonoBehaviour
{
//Attempt at making the ammoGiven variable public
//public int AmmoController.PickUpAmmo(Ammo);
public int ammoGiven;
public int minAmmo;
public int maxAmmo;
public bool pickedUp;
public UnityEvent interactAction;
void Update()
{
}
public void PickUpAmmo()
{
pickedUp = true;
if (pickedUp = true)
{
ammoGiven = Range(minAmmo, maxAmmo);
Debug.Log(ammoGiven);
Debug.Log(NewAmmoGiven);
}
Destroy(gameObject);
}
}
在手枪射击脚本中,我尝试调用变量 ammoGiven ,以便将其添加到手枪脚本中的 currentAmmo 变量中,但这不起作用。该脚本认为 ammoGiven 等于 0,但我没有任何代码行可以证明这一点。
下面是我在手枪射击脚本中调用 ammoGiven 变量的尝试。
public static AmmoController ammoControllerReference;
public int AmmoGiven = ammoControllerReference.ammoGiven;
我尝试将 ammoGiven 变量公开,并且尝试在手枪射击脚本中调用它,但是当我在手枪射击脚本中使用它时,我要么收到错误,要么给出错误的值
问题出在
PickUpAmmo()
函数上。它在初始化 ammoGiven
变量后立即销毁游戏对象。
您可以做的是在拍摄脚本中添加弹药变量,然后从
AmmoController
将变量分配给它。这样,销毁游戏对象时该值就不会丢失。
您还可以尝试创建一个静态脚本来保存所有与游戏相关的值,如下所示:
public static class GameValues {
public static int Ammo = 0;
}
当你拿起弹药时,你可以分配数值:
GameValues.Ammo = Range(minAmmo, maxAmmo);
当你想获取弹药时:
Debug.Log(GameValues.Ammo);