Создание игры Minecraft(создание блоков) Unity3d

Если ты разрабатываешь игры на юнити и не попытался еще написать свой minecraft — то ты не кодер:) Собственно, захотелось попробовать реализовать создание и удаление блоков. Вот что получилось:



Код под катом…


Скрипт MineCraftController.cs:

/*
Author: afrokick
Forum: www.devby.ru
*/
using UnityEngine;
using System.Collections;
public class MineCraftController : MonoBehaviour {

public GameObject block;
public Material mat_blue;
public Material mat_red;
// Use this for initialization
void Start () {
  Screen.showCursor = false;
}

// Update is called once per frame
void Update () {
  Ray ray = Camera.mainCamera.ScreenPointToRay(new Vector3(Screen.width/2,Screen.height/2,0));
  RaycastHit hit;

  if(Physics.Raycast(ray,out hit,5f) && hit.collider.tag == "Block")
  {  
   if(Input.GetMouseButtonUp(0))
   {
        Vector3 pos = hit.collider.transform.position;
        pos += hit.normal;
  
        Instantiate(block,pos,Quaternion.identity);
   }
   else if(Input.GetMouseButtonUp(1))
   {
        DestroyObject(hit.collider.gameObject);
   }
  }else if(Physics.Raycast(ray,out hit,5f) && hit.collider.name == "Plane")
  {
  
   if(Input.GetMouseButtonUp(0))
   {
        Vector3 pos = hit.point;
        pos.y = 0;
        pos.x = Mathf.Round(pos.x);
        pos.z = Mathf.Round(pos.z);
  
        Instantiate(block,pos,Quaternion.identity);
   }
  }
}

void OnGUI()
{
  if(Input.GetKey(KeyCode.M))
  {
   Screen.showCursor = true;
  
   GUILayout.BeginVertical();
   GUILayout.Label(block.renderer.sharedMaterial.name + "");
  
   if(GUILayout.Button("Blue"))
   {
        block.renderer.sharedMaterial = mat_blue;
   }
   if(GUILayout.Button("Red"))
   {
        block.renderer.sharedMaterial = mat_red;
   }
   GUILayout.EndVertical();
  }
  else
  {
   Screen.showCursor = false;
  }
}
}

12 комментариев

avatar
Здравствуйте. Если это возможно, сделайте пожалуйста урок по сохранению блоков, созданных в процессе игры.
avatar
avatar
Ура! Спасибо огромное!
avatar
Пожалуйста! Кстати, можно "+" нажимать под статьей:)
avatar
Ой, забыл :) Кинулся код проверять. Ещё раз спасибо.Низкий поклон до самой земли!
avatar
Все конечно хорошо, но меня смущает один баг, если ставишь блок над головой — то ты в нем застряваешь, каким образом его убрать?
avatar
Как убрать баг с блоком?
avatar
После создания блока проверить есть ли под ним игрок. Позиция блока у нас есть.
Проверку можно выполнить с помощью Raycast
avatar
у меня не идет у меня один блок ставит и все его убрать нельзя и верх блок поставить нельзя только его можно поставить внизу и все
avatar
у меня вобше не работает пишет: Assets/_Skript/MineCraftController.cs(3,14): error CS0101: The namespace `global::' already contains a definition for `MineCraftController'
avatar
что єто значит и как єто исправить?
avatar
все я сам понял спасибо за скрипт <^_^>
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.