Вторник, 26 Октября 2021, 14:43

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Блоки из Minecraft (Блоки из Minecraft)
Блоки из Minecraft
Maxs_Pro_FreshДата: Пятница, 16 Августа 2013, 20:14 | Сообщение # 1
частый гость
Сейчас нет на сайте
Вот кому понадобиться скрипт ставки блоков:
Код
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Gamer : MonoBehaviour
{

     public GameObject block;
     public Material mat_blue;
     public Material mat_red;
  public Material mat_black;
   

     // Use this for initialization
     void Start()
     {
         LoadBlocks();//new
         block.renderer.sharedMaterial = mat_blue;//new
         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.CompareTag("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.Equals("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;
             }
    if (GUILayout.Button("Black"))
             {
                 block.renderer.sharedMaterial = mat_red;
             }
             GUILayout.EndVertical();
         }
         else
         {
             Screen.showCursor = false;
         }
     }

     void OnApplicationQuit()
     {
         SaveBlocks();
     }
     /// <summary>
     /// Для загрузки блоков
     /// </summary>
     void LoadBlocks()
     {
         //если нету записи, то выходим
         if (!PlayerPrefs.HasKey("blocks"))
             return;
         //получаем строку, содержащую все блоки
         string strBlocks = PlayerPrefs.GetString("blocks");
         //получаем массив блоков
         string[] masBlocks = strBlocks.Split(new char[] { ';' }, System.StringSplitOptions.RemoveEmptyEntries);
         //перебираем каждый блок
         foreach (string s in masBlocks)
         {
             //Массив параметров блока
             string[] masParam = s.Split(new char[] { '#' }, System.StringSplitOptions.RemoveEmptyEntries);
             //Позиция
             Vector3 pos = new Vector3(float.Parse(masParam[0]), float.Parse(masParam[1]), float.Parse(masParam[2]));
             //Тип материала
             byte matType = byte.Parse(masParam[4]);
             block.renderer.sharedMaterial = GetMatById(matType);
             //Добавляем блок на сцену
             Instantiate(block, pos, Quaternion.identity);
         }

         Debug.Log(string.Format("Загружено {0} блоков!", masBlocks.Length));
     }
     /// <summary>
     /// Для сохранения блоков
     /// </summary>
     void SaveBlocks()
     {
         //получаем все блоки на сцене
         GameObject[] allBlocks = GameObject.FindGameObjectsWithTag("Block");
         string saveStr = "";
         //берем каждый блок
         foreach (GameObject g in allBlocks)
         {
             //позиция блока
             Vector3 pos = g.transform.position;
             //записываем информацию о блоке в строку.
             saveStr += string.Format("{0}#{1}#{2}#{3}#{4};", pos.x, pos.y, pos.z, GetIdByMat(g.renderer.sharedMaterial));
         }
         //добавляем строку с блоками в хронилище
         PlayerPrefs.SetString("blocks", saveStr);
         //сохраняем!!!
         PlayerPrefs.Save();

         Debug.Log(string.Format("Сохранено {0} блоков", allBlocks.Length));
     }
     /// <summary>
     /// Возвращает ИД указанного материала
     /// </summary>
     /// <param name="m"></param>
     /// <returns></returns>
     byte GetIdByMat(Material m){
         switch (m.name)
         {
             case "mBlue":
                 return 0;
             case "mRed":
                 return 1;
    case "mblue":
                 return 2;
    case "mblack":
                 return 3;
             default:
                 return 0;
         }
     }
     /// <summary>
     /// Возвращает Материал по ИД
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
     Material GetMatById(byte id)
     {
         switch (id)
         {
             case 0:
                 return mat_blue;
             case 1:
                 return mat_red;
    case 2:
                 return mat_black;
             default:
                 return mat_blue;
         }
     }
}


robertonoДата: Пятница, 16 Августа 2013, 20:52 | Сообщение # 2
Чокнутый Кот
Сейчас нет на сайте
Maxs_Pro_Fresh, ты расскажи хотя бы что он делает именно, что какие кнопки делают, куда его ставить.
Если даже это кто то через гугл найдёт то врятле будет пользовать. Скрипт твой или нашёл где то?
EchoITДата: Пятница, 16 Августа 2013, 21:39 | Сообщение # 3
старожил
Сейчас нет на сайте
robertono, понятное дело, не его скрипт, учитывая его вопросы в темах по Unity3d...

Долгожданный анонсик: State of War
robertonoДата: Пятница, 16 Августа 2013, 21:42 | Сообщение # 4
Чокнутый Кот
Сейчас нет на сайте
EchoIT, ну я тоже так думаю. Не указывать ещё ссылку на источник очень плохо...
Maxs_Pro_FreshДата: Пятница, 16 Августа 2013, 22:41 | Сообщение # 5
частый гость
Сейчас нет на сайте
Цитата (robertono)
EchoIT, ну я тоже так думаю. Не указывать ещё ссылку на источник очень плохо...

Скрипт не мой.Но мной изменённый!

Добавлено (16.08.2013, 22:41)
---------------------------------------------

Цитата (Maxs_Pro_Fresh)
Maxs_Pro_Fresh, ты расскажи хотя бы что он делает именно, что какие кнопки делают, куда его ставить.

Вы сказали что я нуб в Unity 3D.А если я расскажу что к чему то это урок получаеться!


robertonoДата: Пятница, 16 Августа 2013, 23:35 | Сообщение # 6
Чокнутый Кот
Сейчас нет на сайте
Maxs_Pro_Fresh, какой урок блин ? У тебя с головой все в порядке? Извините pixeye конечно..
Если ты выкладываешь на этот форум чей то скрипт , даже немного изменённый ты обязан дать ссылку на источник! Это правило!
И что же ты в нём изменил ? Название переменной ? biggrin biggrin biggrin

Добавлено (16.08.2013, 23:35)
---------------------------------------------

Цитата (Maxs_Pro_Fresh)
Вы сказали что я нуб в Unity 3D.А если я расскажу что к чему то это урок получаеться!

ну тогда вообще зачем ты это нам выложил ? Мы и сами догадаемся как такой скрипт сделать. Он очень простой!
last2424Дата: Пятница, 16 Августа 2013, 23:55 | Сообщение # 7
30 мл. блоков
Сейчас нет на сайте
robertono, ага ничёсе простой ты всё время обращаешься за помощью суда )) .

Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
robertonoДата: Суббота, 17 Августа 2013, 00:14 | Сообщение # 8
Чокнутый Кот
Сейчас нет на сайте
last2424, ну не знаю, я его сильно не смотрел. Вот зачем мне этот туториал ? Да , за 2 дня я взял и написал скрипт который позволяет ставить , удалять блоки, экспортировать в xml , импортировать из него. Мой скрипт ещё тот велосипед. За то я могу похвастаться что написал его сам. И если мне потребуется его изменить то это будет совсем просто.
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Блоки из Minecraft (Блоки из Minecraft)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2021 Рейтинг