0

我的布尔值有一个我不明白的问题。我有一个源自 MonoBehavior 的动作脚本。在该脚本中,我有一个布尔变量“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 布尔值。它看起来像这样:

        [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};
        }

CharacterSettings 脚本是每个战斗机(其中有两个)附加的脚本。在那里我想做这样的事情:

        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 上调用。

4

0 回答 0