示例#1
0
    // INSTANTIATOR

    void InstantiateRelief(Transform parent, Vector3 steps, Vector3 origin)
    {
        // Generate wall
        GameObject wall = Instantiate(m_prefabAvoidWall, parent);

        wall.name += "Relief";
        wall.transform.localPosition = origin;
        wall.transform.localRotation = Quaternion.identity;
        AvoidList list = wall.GetComponent <AvoidList>();

        // for each terrain
        foreach (var terrain in m_terrainComp)
        {
            var size          = terrain.terrainData.size;
            var terrainOrigin = terrain.GetPosition();

            // for each step on x and z axis
            for (float x = 0; x < size.x; x += steps.x)
            {
                for (float z = 0; z < size.z; z += steps.z)
                {
                    Vector2 interpolatedPosition = new Vector2(x / size.x, z / size.z);
                    float   h = terrain.terrainData.GetInterpolatedHeight(interpolatedPosition.x, interpolatedPosition.y);
                    Vector3 N = terrain.terrainData.GetInterpolatedNormal(interpolatedPosition.x, interpolatedPosition.y);

                    // compute avoidData
                    Behaviour.EnemiesManager.BoidData avoidData;
                    avoidData.position = terrainOrigin + new Vector3(x, h, z);
                    avoidData.forward  = N;

                    list.m_avoidDatum.Add(avoidData);
                }
            }
        }
    }
示例#2
0
    GameObject InstantiateAvoidWall(Vector3 origin, Quaternion rotation, Transform parent, Vector2 steps, Vector2 size, float heightOffset, string nameSuffix)
    {
        GameObject wall = Instantiate(m_prefabAvoidWall, parent);

        wall.name += nameSuffix;
        wall.transform.localPosition = origin;
        wall.transform.localRotation = rotation;
        AvoidList list = wall.GetComponent <AvoidList>();

        Vector3    wallPosition = wall.transform.position;
        Quaternion wallRotation = wall.transform.rotation;

        for (float x = -size.x / 2; x < size.x / 2; x += steps.x)
        {
            for (float y = -size.y / 2; y < size.y / 2; y += steps.y)
            {
                Behaviour.EnemiesManager.BoidData boidData;
                boidData.position = wallPosition + (wallRotation * new Vector3(x, -heightOffset, y));
                boidData.forward  = (wallPosition - boidData.position).normalized;
                list.m_avoidDatum.Add(boidData);
            }
        }
        return(wall);
    }