我已经对此进行了思考一段时间,我想我可能只是缺少一种基本的基本编码方法来解决此问题,但我只是想不到。基本上,在我的脚本中,我试图为同类的"相同变量"设置不同的集合,在此我可以在(切换炮塔Ingame)之间进行交换。如果我要绘制脚本,它看起来像这样:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Testturretscript : MonoBehaviour {
int ammo;
int maxAmmo;
float reloadTime;
set1(){
ammo = set1.ammo;
maxAmmo = set1.maxAmmo;
reloadTime = set1.reloadTime;
}
set2()
{
ammo = set2.ammo;
maxAmmo = set2.maxAmmo;
reloadTime = set2.reloadTime;
}
// Use this for initialization
void Start () {
use set1;
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.Keypad1) || Input.GetKeyDown(KeyCode.Alpha1)){
use set1;
}
if (Input.GetKeyDown(KeyCode.Keypad2) || Input.GetKeyDown(KeyCode.Alpha2)){
use set2;
}
}
...
}
我知道这听起来可能有些神秘,但是我一定有一些简单的方法来做到这一点。因为当我来回交换时,我确实想正确存储值,而不是覆盖变量的值。
我正在从内存中这样做,所以如果有一些错误,请忍受
从您的问题中,看来您有多种炮塔类型,玩家可以随时切换。与携带多个枪支的玩家类似的想法。
因此,您可以创建一个基类,在这种情况下,Turret
包含一种类型的炮塔的所有信息。所有炮塔都将具有ammo
计数,reloadTime
等,无论其类型是什么类型。
然后,在同一脚本中,我们有Player
类。这两个类可能在不同的文件中,但是为了更容易查看,我将它们合并为一个。
Player
有一系列炮塔或他可以使用的炮塔。我们创建同一类型的currentTurret
变量,因此我们可以跟踪玩家当前使用的炮塔。
首先,我们使用自定义索引变量将currentTurret
变量分配给炮塔数组(或库存)的第一个炮塔。我们使用此变量,因为它更容易修改和查看,而不是在任何地方使用数字。
然后,在Update
中,如果我们按空格,我们将currentTurretIndex
增加一个。然后,我们将目前的炮塔设置为阵列中的第二个炮塔。这基本上是切换武器。警告!例如,这只是不仅会增加索引,因为它最终会得到无效的指针例外。相反,这应该是设置当前炮塔的函数。
然后,如果我们按W
键,我们将currentTurret
告诉Shoot()
。因为我们已经将currentTurret
变量分配给了阵列中的炮塔,所以只有炮塔会发射!哇!
using System;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class Turret
{
public int ammo;
public int maxAmmo;
public float reloadTime;
public void Shoot()
{
// Do some shooting stuff!
}
}
public class Player : MonoBehaviour
{
public Turret[] turretTypes;
public Turret currentTurret;
int currentTurretIndex = 0;
void Start()
{
currentTurret = turretTypes[currentTurretIndex];
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// Do your turret switching here.
// For now I've just increased the turret index by 1.
currentTurretIndex++;
currentTurret = turretTypes[currentTurretIndex]
}
if (Input.GetKeyDown(KeyCode.W))
{
currentTurret.Shoot();
}
}
}
希望这会有所帮助!: - )