我已经为我的玩家添加了耐力,当耐力栏为空时,玩家速度降低到2.当他收集一定的力量时,它会给予他耐力。
当耐力为空时,我设置speed = 2
;当我收集通电时,我会稍微填充耐力栏并返回速度(speed = 7;
)。
问题出在另一个层面。在lvl 2中,地图是不同的,玩家将改变。如果我在地图1和地图2中使用相同的速度,那么玩家将在map2中非常快。为了解释这一点,速度是公开的,我在检查员中编辑它。
现在我很难将速度编码为speed = 7
;这适用于所有场景和关卡。如何让速度更加公开,我可以仅针对此场景进行编辑,还是可以说speed = otherSpeed
?
public void AddStamina(int a_staminaToAdd)
{
// Add stamina when we take coffee.
g_currStamina += a_staminaToAdd;
// Disable the "need stamina: text
g_lowStaminaTxt.enabled = false;
}
public void DeductStamina(int amount)
{
// only deduct stamina will player is moving on ground
if (isPlayerGrounded)
{
// How much stamina are we going to deduct when player is running?
g_currStamina -= amount;
// Change the slider value depending on the stamina
g_StaminaSlider.value = g_currStamina;
if (g_currStamina <= 0 )
{
//TODO : Go slower
m_speed = 2;
g_currStamina = 0;
g_lowStaminaTxt.enabled = true;
IsStaminaEmpty = true;
}
else
g_lowStaminaTxt.enabled = false;
}
}
答案 0 :(得分:3)
将变量拉出函数范围。并将它们添加到班级。
class foo : monobehaviour
{
// Give a default value. This can be changed in the editor
public int SlowSpeed = 2;
public int FastSpeed = 7;
// Your functions somewhere here.
}
既然变量是在类级别定义的,并且是public
,您可以使用编辑器统一更改值。默认情况下,将使用2和7,如果在特定场景中更改这些值中的任何一个,则在更改时将应用这些值。
现在您需要将m_speed = 2;
更改为m_speed = SlowSpeed;
才能使其正常工作
答案 1 :(得分:2)
通常的解决方案是使用静态成员。
一个好的解决方案是将播放器的数据值存储在一个单独的类中(因此它也是多人友好的),如MyStatistics,实现如下的静态属性:
public class MyStatistics
{
public static float Stamina { get; set; }
public static float Health { get; set; }
public static float Speed { get; set; }
}
但不是从MonoBehaviour继承,所以你不需要将它附加到游戏对象,你只需在代码中的任何地方使用它,只需使用它们的完整限定名称
//TODO : Go slower
MyStatistics.Speed = 2f;
MyStatistics.Stamina = 0f;
要记住的一件事是在玩家死亡之前将这些数据重置为默认值,以防玩家死亡,否则他们会使用前一个数据开始一个新游戏,因为静态保持在那里因为可执行文件正在运行。