如何在 Unity 中的不同脚本中使用在一个脚本中定义的变量

问题描述 投票:0回答:1

我正在尝试在 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 变量公开,并且尝试在手枪射击脚本中调用它,但是当我在手枪射击脚本中使用它时,我要么收到错误,要么给出错误的值

c# unity-game-engine variables random global-variables
1个回答
0
投票

问题出在

PickUpAmmo()
函数上。它在初始化
ammoGiven
变量后立即销毁游戏对象。

您可以做的是在拍摄脚本中添加弹药变量,然后从

AmmoController
将变量分配给它。这样,销毁游戏对象时该值就不会丢失。

您还可以尝试创建一个静态脚本来保存所有与游戏相关的值,如下所示:

public static class GameValues {
    public static int Ammo = 0;
}

当你拿起弹药时,你可以分配数值:

GameValues.Ammo = Range(minAmmo, maxAmmo);

当你想获取弹药时:

Debug.Log(GameValues.Ammo);
© www.soinside.com 2019 - 2024. All rights reserved.