为什么我在 ScriptableObject 中设置的 bool 值没有在另一个脚本中更新?

问题描述

我不明白我的布尔值有问题。我有一个源自 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 (将#修改为@)