58 lines of C# code to create 5000 “magic” cubes.

I’ve been learning a lot over the last three weeks about terrain generation and manipulation of terrain data. So I thought it was about time to actually cover the basics!

 

Cube Controller

using UnityEngine;

public class CubeController : MonoBehaviour
{
    public Rigidbody rb; 
    private float maxRaycastDistance = 0.5f;
    public float jumpVelocity;
    public Color cubeColour;

    public Color RandomColor()
    {
        return new Color(Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f));
    }

    void Start()
    {
        jumpVelocity = Random.Range(10f, 30f);
        rb = GetComponent<Rigidbody>();
        cubeColour = RandomColor();
        GetComponent<MeshRenderer>().material.color = cubeColour;
    }

    void FixedUpdate()
    {
        if (Input.GetKey(KeyCode.Space) && isGrounded())
        {
            Vector3 jumpVel = new Vector3(0, jumpVelocity, 0);
            rb.velocity = rb.velocity + jumpVel;
        }
        float hor = Input.GetAxis("Horizontal");
        float vert = Input.GetAxis("Vertical");
        Vector3 movement = new Vector3(hor * Time.deltaTime, 0, vert * Time.deltaTime);
        rb.MovePosition(transform.position + movement);
    }

    bool isGrounded()
    {
        return Physics.Raycast(transform.position, Vector3.down, maxRaycastDistance);
    }
}

 

Cube GeneratorĀ 

using UnityEngine;

public class CubeGenerator : MonoBehaviour
{
    public GameObject myPrefab;
    float spread = 50f;

    void Start()
    {
        Vector3 spawn = new Vector3(512f, 50f, 512f);

        for (int i = 0; i < 5000; i++)
        {
            float random = Random.Range(-spread, spread);
            GameObject thing = Instantiate(myPrefab, (spawn + new Vector3(random, random, random)), Quaternion.identity) as GameObject;
        }
    }
}