Пример #1
0
    public static GameObject GetCloseManufactory(Vector3 pos, float radius = -0.1f)
    {
        m_hunterManufactorys = GameObject.FindGameObjectsWithTag("HunterManufactory");

        GameObject result   = null;
        float      distance = radius;

        // 指定範囲内かつ人手が足りていない製作所を探す
        foreach (var manufactory in m_hunterManufactorys)
        {
            HunterManufactory factory = manufactory.GetComponent <HunterManufactory>();
            // 製作に向かう必要がない
            if (factory.IsSupport() == false)
            {
                continue;
            }

            // 近い製作所を優先
            Vector3 factoryPos = manufactory.transform.position;
            float   dis        = (factoryPos - pos).magnitude;
            if (dis < distance || distance < 0.0f)
            {
                distance = dis;
                result   = manufactory;
            }
        }
        return(result);
    }
    private void GoToManufactory(StateData data)
    {
        // 移動コンポーネント
        Movement movement = data.movement;

        // 近くの製作所を探す
        GameObject target = AIManager.GetCloseManufactory(data.ai.transform.position);

        // 製作所がある
        if (target)
        {
            targetFactory            = target.GetComponent <HunterManufactory>();
            targetFactory.CreaterPos = data.ai.transform;
            targetObj = target;
            // 製作所に向かう
            movement.SetDestination(targetObj.transform.position);
            targetFactory.ManufactureNum++;
        }
        else
        {
            // 警戒状態解除
            data.ai.ChangeState(new CitizenNormalState());
            return;
        }
    }
 private void Awake()
 {
     hunterManufactory = null;
     actorText         = GameObject.Find("SurvivorText").GetComponent <Text>();
     rateText          = GameObject.Find("RateNumText").GetComponent <Text>();
 }