在Update()外部创建的变量

时间:2018-12-08 19:46:36

标签: c# variables unity3d move

假设我有一个移动的生物:

        bool pathFound = false;
        void Update()
        {
            if(!pathFound)
            {
                //Find a destination point
                pathFound = true;
            }

            //Move creature to point

            if(Creature reached the point)
            {
                pathFound = false;
            }
        }

因此移动取决于函数外部创建的变量。
如果我想添加完全相同的第二个生物,则代码将被复制:

        bool pathFound1 = false;
        bool pathFound2 = false;
        void Update()
        {
            if(!pathFound1)
            {
                //Find a destination point 1
                pathFound1 = true;
            }
            //Move creature 1 to point 1
            if(Creature reached the point 1)
            {
                pathFound1 = false;
            }

            if(!pathFound2)
            {
                //Find a destination point 2
                pathFound2 = true;
            }
            //Move creature 2 to point 2
            if(Creature2 reached the point 2)
            {
                pathFound2 = false;
            }
        }

对我来说,看起来很奇怪且效率低下的东西。即使我将所有这些步骤移到一个函数中,也应该创建两个几乎相同的函数,只是pathFound1和pathFound2有所不同。
因此,我想知道如何通过更多定性代码获得相同的结果吗?

1 个答案:

答案 0 :(得分:2)

将布尔值pathFound作为public中的Creature成员,默认值初始化为false

那么您可以:

void Update()
    {
        foreach (Creature creature in yourCreaturesList)
        {
            if (creature.PathFound)
            {
                //Find a destination point for creature
                creature.PathFound = true;
            }

            //Move creature to its target point
            if(creature reached the point)
            {
                creature.PathFound = false;
            }
        }
    }

如果需要,也可以将其他参数封装在Creature类中。