问题描述
我不明白我的布尔值有问题。我有一个源自 MonoBehavior 的 Actions 脚本。在那个脚本中,我有一个布尔变量“IsCompleted”,它指示攻击是否完成。在 Awake 中,我将此 bool 设置为 true,以指示没有攻击正在运行。在另一个源自 ScriptableObject 的脚本 - ScriptableAttack 中,我有一个函数是攻击的主要部分。在那里我编辑了这个值并将其设置为 false。然后,如果条件良好,我想在 bool 再次设置为 false 之后运行一个计时器。现在,由于我无法在 ScriptableObject 上使用典型的 Update 方法,所以我想在我拥有的第三个脚本中检查此值是否为 false - CharacterSettings - 它派生自 MonoBehavior。现在的问题是,当我在 CharacterSettings 脚本中检查 Update 上的值时,它总是返回 true,而我发现它在 ScriptableAttack 中确实是 false。我还检查了我是否在某处覆盖了这个值但找不到任何东西。我在这里写下的用法是我在我的应用程序中唯一的用法。也许有人可以帮助或至少向我解释这种行为。
这是 ScriptableObjects 函数的基础:
public void Attack()
{
if (!_actions.IsCompleted)
{
return;
}
_actions.IsCompleted = false;
if (Vector3.distance(GeneralGameManager.Characters[0].transform.position,GeneralGameManager.Characters[1].transform.position) > _attackdistance)
{
_actions.IsCompleted = true;
return;
}
}
进一步说明:Actions 是一个脚本,主要包含 SO 和 IsCompleted bool。它看起来像这样:
[Serializefield] private ScriptableAttack _frontPunch;
[Serializefield] private ScriptableAttack _backPunch;
[Serializefield] private ScriptableAttack _frontKick;
[Serializefield] private ScriptableAttack _backKick;
[HideInInspector] public ScriptableAttack[] AttackCollection;
[HideInInspector] public bool IsCompleted;
private void Awake()
{
IsCompleted = true;
AttackCollection = new[] {FrontPunch,BackPunch,FrontKick,BackKick};
}
角色设置脚本是每个战士(有两个)附加的脚本。在那里我想做这样的事情:
private void Update()
{
if (_actions.IsCompleted)
{
return;
}
timer += Time.deltaTime;
if (timer >= attackExecutionTimer)
{
//Do damage and stuff
_actions.IsCompleted = true;
timer = 0;
}
}
其中 timer 是 0 处的浮点值,attackExecutionTimer 是 SO 中设置的浮点参数。
来自 SO 的 Attack() 在 Input.GetKeyDown 上调用。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)