unity3d 正在访问其他脚本中的变量,名称“isAnimated”在当前上下文中不存在

t3psigkw  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(185)

我正在尝试从另一个脚本中访问一个布尔值,我使用了一个自定义的命名空间。这个想法是在检查器中为每个项目设置一个复选框,以确定是否应该设置动画。在武器网格中,我有一个materialoffset animator,如果选中该复选框,它将触发。

using MFPSEditor;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MFPS.Internal.Structures;

namespace MFPS.Addon.Customizer
{

在这个脚本的底部,我有这样的:

[System.Serializable]
    public class GlobalCamo
    {
        public string Name;
        [SpritePreview(50)] public Texture2D Preview;
        public MFPSItemUnlockability Unlockability;
        public string Description;
        public bool isAnimated;

        public int Price
        {
            get => Unlockability.Price;
        }

        public bool animatedCamo()
        { 
            return isAnimated;
        }

        public bool isFree() { return Price <= 0; }

        [HideInInspector] public Sprite m_sprite = null;
        public Sprite spritePreview()
        {
            if (m_sprite == null && Preview != null)
            {
                m_sprite = Sprite.Create(Preview, new Rect(0, 0, Preview.width, Preview.height), new Vector2(0.5f, 0.5f));
            }
            return m_sprite;
        }
    }
}

我正在尝试访问下面脚本中的变量“isAnimated”:

using UnityEngine;

public class MaterialOffsetAnimator : MonoBehaviour
{
    // The material that will be animated
    Material material;

    // The speed at which the offset will be animated
    public Vector2 animationSpeed;

    void Update()
    {
        material = GetComponent<Renderer>().material;

        if ( isAnimated == true )
        {
            // Update the material's offset based on the animation speed
            material.mainTextureOffset += animationSpeed * Time.deltaTime;
        }
        else
        {

        }
    }
}
h9a6wy2h

h9a6wy2h1#

“isAnimated”是GlobalCamo类中的示例字段,而不是静态字段。如果不引用GlobalCamo示例,则无法访问它。
您可以尝试使用单例来完成此操作:没关系,GlobalCamo并不是从MonoBehaviour继承的,你可以让isAnimated字段本身成为静态的,如下所示:

public static bool isAnimated;

然后像这样在MaterialOffsetAnimator中访问它:

if (GlobalCamo.isAnimated)
{
    // Your code
}

另外,还有一点:你不需要在条件中使用“== true”和布尔值。如果一个布尔字段的值为true,那么条件的计算结果也为true。

相关问题