Генератор объектов для террейна


Генератор пустшыек:

using UnityEngine;
using System.Collections;
[ExecuteInEditMode]
public class GeneratorTree : MonoBehaviour 
{
	public int Count;
	public int RandomX;
	public int RandomY;
	public Transform pref;
	void Start () 
	{
		for(int i=0; i<Count; i++)
		{
		Instantiate(pref,transform.position+new Vector3(Random.Range(-RandomX,RandomX),0,Random.Range(-RandomY,RandomY)), transform.rotation);
		}
	
	}
}

Скрипт для этих пустышек:

using UnityEngine;
using System.Collections;
[ExecuteInEditMode]
public class Treeegeeen : MonoBehaviour {
	public Transform IObject;
	// Use this for initialization
	void Start () 
	{
		RaycastHit Hit;
		Ray ray = new Ray(transform.position, -transform.up);
		if(Physics.Raycast(ray,out Hit,1000))
		{
			Transform cloneObject = Instantiate(IObject, Hit.point, new Quaternion(0,Random.Range(0,360),0,Random.Range(0,360))) as Transform;
			cloneObject.parent = Hit.transform;
		}
	}
}

Комментарии к этому посту

  • Anton1987ru
    22.10.2013 at 11:09

    Здравствуйте ! скажите , а как сделать проверку на столкновение с объектами? у меня деревья прямо на крышах домов генеряться


  • Anton1987ru
    23.10.2013 at 03:49

    Все я дописал проверку на столкновения! Чтобы заработал скрипт у объекта которого не должно расти деревьев травы и т.п. должен быть коллайдер и тэг отличный от Terrain

    using UnityEngine;
    using System.Collections;

    public class SpawnerVegetation : MonoBehaviour {
    public Transform IObject;
    private int LayerGround;
    private bool CastRays = true;

    void Start () {
    LayerGround = LayerMask.NameToLayer(«Terrain»);
    }

    void Update () {
    if (CastRays) {

    Ray ray = new Ray(transform.position, -transform.up);
    RaycastHit Hit;

    // Raycast
    if(Physics.Raycast(ray,out Hit,1000)) {

    if (Hit.transform.gameObject.layer == LayerGround) {
    // Debug.Log(«Terain»);
    // Make a path
    Transform cloneObject = Instantiate(IObject, Hit.point, new Quaternion(0, Random.Range(0,360),0,Random.Range (0,360))) as Transform;
    cloneObject.parent = Hit.transform;

    } else {
    // Debug.Log(«Other Objects»);
    // Do whatever you want

    }
    }
    }
    }
    }


  • Vadim
    07.01.2014 at 21:34

    Если вставить в скрипт для пустышек параметры
    private float LifeTime = 2;
    private float RespawnTime = 0;

    void Update ()
    {
    RespawnTime += Time.deltaTime; //RespawnTime увеличивается с каждым кадром после создания объекта
    if(RespawnTime>LifeTime) // если RespawnTime больше LifeTime
    {
    Dead();//вызываем функцию dead
    }
    }
    void Dead() // функция dead
    {
    Destroy(gameObject); //удаляем объект на котором висит скрипт
    }
    }
    то они сами уберутся через 2 кадра и не будут лишний раз загружать компьютор



Оставить комментарий