コード例 #1
0
    protected override void CalculateSteeringForces()
    {
        // Staying in bounds
        if (transform.position.x >= Terrain.activeTerrain.terrainData.size.x - safeZone || transform.position.z >= Terrain.activeTerrain.terrainData.size.x - safeZone || transform.position.x < 0 + safeZone || transform.position.z + safeZone < 0)
        {
            var vecX = Terrain.activeTerrain.terrainData.size.x / 2;
            // Gets a random y
            var vecZ = Terrain.activeTerrain.terrainData.size.z / 2;
            // Sticks it at the terrain height
            float vecY = Terrain.activeTerrain.SampleHeight(new Vector3(vecX, 0, vecZ));

            ApplyForce(Seek(new Vector3(vecX, vecY, vecZ)));
        }
        // other logic
        else
        {
            // Applies WanderingForce
            ApplyForce(Wandering() * flockData.wanderStrength);
            // Applies Alignment force
            ApplyForce(Seek(Align()) * flockData.alignmentStrength);
            // Applies Cohesion force
            ApplyForce(Seek(Cohesion()) * flockData.coherenceStrength);
            // Gives this unit more room if it needs it
            if (Vector3.Distance(gameObject.transform.position, flockData.findNearest(gameObject)) < flockData.separationStrength)
            {
                ApplyForce(Seperation());
            }
            foreach (GameObject obs in obst)
            {
                ApplyForce(AvoidObstacle(obs) * flockData.avoidenceStrength);
            }
        }
    }