如何在一个脚本和另一个脚本中使用枚举?

时间:2017-11-21 16:27:48

标签: c# unity3d unity5

在第一个脚本中:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LightsEffects : MonoBehaviour
{
    public enum Directions
    {
        Forward, Backward
    };

    private Renderer[] renderers;
    private float lastChangeTime;
    private int greenIndex = 0;

    public void LightsEffect(List<GameObject> objects, Color instantiateColor, Color colorEffect)
    {
        renderers = new Renderer[objects.Count];
        for (int i = 0; i < renderers.Length; i++)
        {
            renderers[i] = objects[i].GetComponent<Renderer>();
            renderers[i].material.color = Color.red;
        }

        // Set green color to the first one
        greenIndex = 0;
        renderers[greenIndex].material.color = Color.green;
    }

    public void LightsEffectCore(float delay, bool changeDirection)
    {
        // Change color each `delay` seconds
        if (Time.time > lastChangeTime + delay)
        {
            lastChangeTime = Time.time;

            // Set color of the last renderer to red
            // and the color of the current one to green
            renderers[greenIndex].material.color = Color.red;
            if (changeDirection == true)
            {
                Array.Reverse(renderers);
                changeDirection = false;
            }
            greenIndex = (greenIndex + 1) % renderers.Length;
            renderers[greenIndex].material.color = Color.green;
        }
    }
}

在这个脚本中,我想在核心方法中使用枚举方向而不是bool:

public void LightsEffectCore(float delay, bool changeDirection)

而是bool changeDirection使用枚举来决定前进或后退的方向。

然后在另一个脚本中使用此脚本,例如在我做的另一个脚本中:

public LightsEffects lightseffect;

然后在开始:

void Start()
{
 lightseffect.LightsEffect(objects, Color.red, Color.green);
}

然后在更新中我想决定方向:

void Update()
{
  lightseffect.LightsEffectCore(0.1f, false);
}

但是我想在这里前进/后退使用false / true 也许是这样的:

lightseffect.LightsEffectCore(0.1f, lightseffect.Forward);

因为错误/真实并不真正具有其所做的意义。

另一种选择是将其保留为false / true,但在用户输入时为方法添加描述:lightseffect.LightsEffectCore(

当他打字时(他会看到该方法的作用以及何时打字的说明, 它会告诉他假/真的会做什么。但我不确定如何为此做出描述。

1 个答案:

答案 0 :(得分:1)

Directions是您感兴趣的枚举的名称。它还包含在LightsEffects类中。

因此,在其他地方引用它的方式是LightsEffects.Directions然后是另一个点,然后是值(Forward等)。这类似于Fully Qualified Name,但已经声明了该范围的一部分(无论导入/使用是什么导致LightsEffects)。

所以你的行:

lightseffect.LightsEffectCore(0.1f, lightseffect.Forward);

变为:

lightseffect.LightsEffectCore(0.1f, LightsEffects.Directions.Forward);

如果您使用了Directions.Forward,它甚至可以为您解决此问题:您的IDE会注意到错误(未知参考路线)并建议修复(更改为LightsEffects.Directions) ),我知道Visual Studio会这样做,因为我在我正在进行的项目中有类似的情况。