예제 #1
0
    public void CheckIfZoneIsWithinTerrain_test()
    {
        TerrainData terrainData = new TerrainData {
            size = new Vector3(512, 512, 512)
        };
        Terrain terrain = Terrain.CreateTerrainGameObject(terrainData).GetComponent <Terrain>();

        terrain.transform.position = Vector3.zero;

        Assert.That(TerrainScanner.CheckIfZoneIsWithinTerrain(terrain, new Vector3(256, 0, 256), 100, 100), Is.True);
        Assert.That(TerrainScanner.CheckIfZoneIsWithinTerrain(terrain, new Vector3(0, 0, 0), 100, 100), Is.False);
        Assert.That(TerrainScanner.CheckIfZoneIsWithinTerrain(terrain, new Vector3(256, 0, 0), 100, 100), Is.False);
        Assert.That(TerrainScanner.CheckIfZoneIsWithinTerrain(terrain, new Vector3(0, 0, 256), 100, 100), Is.False);
        Assert.That(TerrainScanner.CheckIfZoneIsWithinTerrain(terrain, new Vector3(50, 0, 50), 100, 100), Is.True);
    }
예제 #2
0
    public void GetTerrainAtWorldPosition_test()
    {
        TerrainData terrainData = new TerrainData {
            size = new Vector3(512, 512, 512)
        };
        Terrain terrain = Terrain.CreateTerrainGameObject(terrainData).GetComponent <Terrain>();

        terrain.transform.position = Vector3.zero;

        Assert.That(TerrainScanner.GetTerrainAtWorldPosition(new Vector3(256, 0, 256), out Terrain terrain1), Is.True);
        Assert.That(TerrainScanner.GetTerrainAtWorldPosition(new Vector3(0, 0, 0), out Terrain terrain2), Is.True);
        Assert.That(TerrainScanner.GetTerrainAtWorldPosition(new Vector3(-1, 0, 0), out Terrain terrain3), Is.False);
        Assert.That(TerrainScanner.GetTerrainAtWorldPosition(new Vector3(0, 0, -1), out Terrain terrain4), Is.False);
        Assert.That(TerrainScanner.GetTerrainAtWorldPosition(new Vector3(513, 0, 0), out Terrain terrain5), Is.False);
        Assert.That(TerrainScanner.GetTerrainAtWorldPosition(new Vector3(0, 0, 513), out Terrain terrain6), Is.False);
        Assert.That(TerrainScanner.GetTerrainAtWorldPosition(new Vector3(513, 0, 513), out Terrain terrain7), Is.False);
        Assert.That(terrain1.Equals(terrain2), Is.True);
    }
예제 #3
0
        private void Awake()
        {
            _boxCollider           = GetComponent <BoxCollider>();
            _boxCollider.size      = new Vector3Int(_influenceRadius, _influenceRadius, _influenceRadius);
            _boxCollider.center    = new Vector3Int(0, _influenceRadius >> 1, 0);
            _boxCollider.isTrigger = true;

            if (TerrainScanner.GetTerrainAtWorldPosition(transform.position, out Terrain terrain))
            {
                if (TerrainScanner.GetTerrainMap(terrain, transform.position, InfluenceRadius, InfluenceRadius, out Map map))
                {
                    Map = map;
                }
            }
            else
            {
                throw new UnityException("The ZoneBehaviour has to be located unto a terrain.");
            }
        }
예제 #4
0
    public void GetTerrainMap_test()
    {
        TerrainData terrainData = new TerrainData {
            size = new Vector3(512, 512, 512),
            heightmapResolution = 512
        };
        Terrain terrain = Terrain.CreateTerrainGameObject(terrainData).GetComponent <Terrain>();

        float[,] heights           = terrain.terrainData.GetHeights(0, 0, 512, 512);
        terrain.transform.position = Vector3.zero;

        heights[255, 255] = 100;
        terrain.terrainData.SetHeights(0, 0, heights);

        Assert.That(TerrainScanner.GetTerrainMap(terrain, new Vector3(256, 0, 256), 100, 100, out Map map), Is.True);
        Assert.That(map.IsPositionValid(new Vector2Int(50, 50), new Vector2Int(1, 1)), Is.False);
        Assert.That(map.IsPositionValid(new Vector2Int(51, 51), new Vector2Int(1, 1)), Is.True);
        Assert.That(map.IsPositionValid(new Vector2Int(48, 48), new Vector2Int(1, 1)), Is.True);
    }