Как написать настоящий майнкрафт

Время на прочтение
7 мин

Количество просмотров 23K

Добро пожаловать в самую запутанную архитектуру проекта. Да я умею писать вступление…

image

Попробуем сделать небольшую демку minecraft в браузере. Пригодятся знания JS и three.js.

Немного условностей. Я не претендую на звание лучшее приложение столетия. Это всего лишь моя реализация для данной задачи. Также есть видео версия для тех кому лень читать(там тот же смысл, но другими словами).

В конце статьи есть все нужные ссылки. Постараюсь как можно меньше воды в тексте. Объяснять работу каждой строки не буду. Вот теперь можно начать.

Для начала чтобы понимать какой будет итог, то вот демка игры.

Разделим статью на несколько частей:

  1. Структура проекта
  2. Игровой цикл
  3. Настройки игры
  4. Генерация карты
  5. Камера и управление

Структура проекта

Вот так выглядит структура проекта.

image

index.html — Расположение канваса, немного интерфейса и подключение стилей, скриптов.
style.css — Стили только для внешнего вида. Самое важное это кастомный курсор для игры который располагается в центре экрана.

texture — Здесь лежат текстуры для курсора и блока земли для игры.
core.js — Основной скрипт где происходит инициализация проекта.
perlin.js — Это библиотека для шума Перлина.
PointerLockControls.js — Камера от three.js.
controls.js — Управление камерой и игроком.
generationMap.js — Генерация мира.
three.module.js — Сам three.js в виде модуля.
settings.js — Настройки проекта.

index.html

<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<link rel="stylesheet" href="style/style.css">
	<title>Minecraft clone</title>
</head>
<body>
	<canvas id="game" tabindex="1"></canvas>
	<div class="game-info">
		<div>
			<span><b>WASD: </b>Передвижение</span>
			<span><b>ЛКМ: </b> Поставить блок</span>
			<span><b>ПКМ: </b> Удалить блок</span>
		</div>
		<hr>
		<div id="debug">
			<span><b></b></span>
		</div>
	</div>
	<div id="cursor"></div>

	<script src="scripts/perlin.js"></script>
	<script src="scripts/core.js" type="module"></script>
</body>
</html>

style.css

body {
	margin: 0px;
	width: 100vw;
	height: 100vh;
}
#game {
	width: 100%;
	height: 100%;
	display: block;
}
#game:focus {
    outline: none;
}
.game-info {
	position: absolute;
	left: 1em;
	top: 1em;
	padding: 1em;
	background: rgba(0, 0, 0, 0.9);
	color: white;
	font-family: monospace;
	pointer-events: none;
}
.game-info span {
	display: block;
}
.game-info span b {
	font-size: 18px;
}
#cursor {
	width: 16px;
	height: 16px;
	position: fixed;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	background-image: url("../texture/cursor.png");
	background-repeat: no-repeat;
	background-size: 100%;

	filter: brightness(100);
}

Игровой цикл

В core.js нужно провести инициализацию three.js, настроить его и добавить все нужные модули от игры + обработчики событий… ну и игровой цикл запустить. В учет того, что все настройки стандартные, то объяснять их нет смысла. Поговорить можно про map (он принимает сцену игры для добавления блоков) и contorls т.к. он принимает несколько параметров. Первый это камера от three.js, сцену для добавления блоков и карту чтобы можно было взаимодействовать с ней. update отвечает за обновление камеры, GameLoop — игровой цикл, render- стандарт от three.js для обновления кадра, событие resize также стандарт для работы с канвасом (это реализация адаптива).

core.js

import * as THREE from './components/three.module.js';
import { PointerLockControls } from './components/PointerLockControls.js';

import { Map } from "./components/generationMap.js";
import { Controls } from "./components/controls.js";

// стандартные настройки three.js
const canvas				= document.querySelector("#game");
const scene 				= new THREE.Scene();
scene.background 			= new THREE.Color(0x00ffff);
scene.fog 					= new THREE.Fog(0x00ffff, 10, 650);
const renderer 				= new THREE.WebGLRenderer({canvas});
renderer.setSize(window.innerWidth, window.innerHeight);
const camera 				= new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.set(50, 40, 50);

// Создание карты
let mapWorld = new Map();
mapWorld.generation(scene);

let controls = new Controls( new PointerLockControls(camera, document.body),  scene, mapWorld );

renderer.domElement.addEventListener( "keydown", (e)=>{ controls.inputKeydown(e); } );
renderer.domElement.addEventListener( "keyup", (e)=>{ controls.inputKeyup(e); } );
document.body.addEventListener( "click", (e) => { controls.onClick(e); }, false );

function update(){
	// передвижение/камера
	controls.update();
};

GameLoop();

// Игровой цикл
function GameLoop() {
	update();
	render();
	requestAnimationFrame(GameLoop);
}

// Рендер сцены(1 кадра)
function render(){
	renderer.render(scene, camera);
}

// обновление размера игры
window.addEventListener("resize", function() {
	camera.aspect = window.innerWidth / window.innerHeight;
	camera.updateProjectionMatrix();
	renderer.setSize(window.innerWidth, window.innerHeight);
});

Настройки

В настройки можно было вынести и другие параметры, например, настройки three.js, но я сделал без них и сейчас здесь лишь пара параметров отвечающие за размер блоков.

settings.js

export class Settings {
	constructor() {
		// площадь блока
		this.blockSquare 		= 5;
		// размер и площадь чанка
		this.chunkSize 			= 16;
		this.chunkSquare 		= this.chunkSize * this.chunkSize;
	}
}

Генерация карты

В классе Map у нас есть несколько свойство которые отвечают за кеш материалов и параметры для шума Перлина. В методе generation мы загружаем текстуры, создаем геометрию и меш. noise.seed отвечает за стартовое зерно для генерации карты. Можно рандом заменить на статичное значение чтобы карты всегда была одинаковая. В цикле по X и Z координатам начинаем расставлять кубы. Y координата генерируется за счет библиотеки pretlin.js. В конечном итоге мы добавляем куб с нужными координатами на сцену через scene.add( cube );

generationMap.js

import * as THREE from './three.module.js';
import { Settings } from "./settings.js";

export class Map {
    constructor(){
		this.materialArray;
		
		this.xoff = 0;
		this.zoff = 0;
		this.inc = 0.05;
		this.amplitude = 30 + (Math.random() * 70);
    }
    generation(scene) {
		const settings = new Settings();

		const loader = new THREE.TextureLoader();
		const materialArray = [
			new THREE.MeshBasicMaterial( { map: loader.load("../texture/dirt-side.jpg") } ),
			new THREE.MeshBasicMaterial( { map: loader.load('../texture/dirt-side.jpg') } ),
			new THREE.MeshBasicMaterial( { map: loader.load('../texture/dirt-top.jpg') } ),
			new THREE.MeshBasicMaterial( { map: loader.load('../texture/dirt-bottom.jpg') } ),
			new THREE.MeshBasicMaterial( { map: loader.load('../texture/dirt-side.jpg') } ),
			new THREE.MeshBasicMaterial( { map: loader.load('../texture/dirt-side.jpg') } )
		];

		this.materialArray = materialArray;

		const geometry = new THREE.BoxGeometry( settings.blockSquare, settings.blockSquare, settings.blockSquare);

		noise.seed(Math.random());
		
		for(let x = 0; x < settings.chunkSize; x++) {
			for(let z = 0; z < settings.chunkSize; z++) {

				let cube = new THREE.Mesh(geometry, materialArray);

				this.xoff = this.inc * x;
				this.zoff = this.inc * z;
				let y = Math.round(noise.perlin2(this.xoff, this.zoff) * this.amplitude / 5) * 5;

				cube.position.set(x * settings.blockSquare, y, z * settings.blockSquare);
				scene.add( cube );
				
			}
		}
	}
}

Камера и управление

Я уже говорил, что controls принимает параметры в виде камеры, сцены и карты. Также в конструкторе мы добавляем массив keys для клавиш и movingSpeed для скорости. Для мыши у нас есть 3 метода. onClick определяет какая кнопка нажата, а onRightClick и onLeftClick уже отвечают за действия. Правый клик(удаление блока) происходит через raycast и поиска пересеченных элементов. Если их нет, то прекращаем работу, если есть, то удаляем первый элеент. Левый клик работает по схожей системе. Для начала создаем блок. Запускаем рейкаст и если есть блок который пересек луч, то получаем координаты этого блока. Далее определяем с какой стороны произошел клик. Меняем координаты для созданного куба в соответствии со стороной к которой мы добавляем блок. градация в 5 единиц т.к. это размер блока(да здесь можно было использовать свойство из settings).

Как работает управление камерой?! У нас есть три метода inputKeydown, inputKeyup и update. В inputKeydown мы добавляем кнопку в массив keys. inputKeyup отвечает за очистку кнопок из массива которые отжали. В update идет проверка keys и вызывается moveForward у камеры, параметры которые принимает метод это скорость.

controls.js

import * as THREE from "./three.module.js";
import { Settings } from "./settings.js";

export class Controls {
	constructor(controls, scene, mapWorld){
		this.controls = controls;
		this.keys = [];
		this.movingSpeed = 1.5;
		this.scene = scene;
		this.mapWorld = mapWorld;
	}
	// клик
	onClick(e) {
		e.stopPropagation();
		e.preventDefault();

		this.controls.lock();

		if (e.button == 0) {
			this.onLeftClick(e);
		} else if (e.button == 2) {			
			this.onRightClick(e);
		}
	}
	onRightClick(e){
		// Удаление элемента по клику

		const raycaster = new THREE.Raycaster();
		
		raycaster.setFromCamera( new THREE.Vector2(), this.controls.getObject() );
		let intersects = raycaster.intersectObjects( this.scene.children );
		
		if (intersects.length < 1)
			return;
		this.scene.remove( intersects[0].object );
	}
	onLeftClick(e) {

		const raycaster = new THREE.Raycaster();
		const settings = new Settings();

		// Поставить элемент по клику
		const geometry = new THREE.BoxGeometry(settings.blockSquare, settings.blockSquare, settings.blockSquare);
		const cube = new THREE.Mesh(geometry, this.mapWorld.materialArray);
		
		raycaster.setFromCamera( new THREE.Vector2(), this.controls.getObject() );
		const intersects = raycaster.intersectObjects( this.scene.children );
		if (intersects.length < 1)
			return;
		const psn = intersects[0].object.position;
		switch(intersects[0].face.materialIndex) {
			case 0:
				cube.position.set(psn.x + 5, psn.y, psn.z); 
				break;
			case 1: 
				cube.position.set(psn.x - 5, psn.y, psn.z); 
				break;
			case 2:
				cube.position.set(psn.x, psn.y + 5, psn.z); 
				break;
			case 3:
				cube.position.set(psn.x, psn.y - 5, psn.z); 
				break;
			case 4:
				cube.position.set(psn.x, psn.y, psn.z + 5); 
				break;
			case 5: 
				cube.position.set(psn.x, psn.y, psn.z - 5); 
				break;
		}

		this.scene.add(cube);
	}
	// нажали на клавишу
	inputKeydown(e) {
		this.keys.push(e.key);
	}
	// отпустили клавишу
	inputKeyup(e) {
		let newArr = [];
		for(let i = 0; i < this.keys.length; i++){
			if(this.keys[i] != e.key){
				newArr.push(this.keys[i]);
			}
		}
		this.keys = newArr;
	}
	update() {
		// Движение камеры
		if ( this.keys.includes("w") || this.keys.includes("ц") ) {
			this.controls.moveForward(this.movingSpeed);
		}
		if ( this.keys.includes("a") || this.keys.includes("ф") ) {
			this.controls.moveRight(-1 * this.movingSpeed);
		}
		if ( this.keys.includes("s") || this.keys.includes("ы") ) {
			this.controls.moveForward(-1 * this.movingSpeed);
		}
		if ( this.keys.includes("d") || this.keys.includes("в") ) {
			this.controls.moveRight(this.movingSpeed);
		}
	}
}

Ссылки

Как и обещал. Весь материал который пригодится.

Если есть желание, то на можете добавить свой функционал к проекту на гитхаб.

perlin.js
three.js
GitHub

Мы подготовили серию коротких обучающих видеоуроков по программированию в игровой вселенной Minecraft с помощью языка Python.

Minecraft (Майнкрафт) – это популярная во всём мире компьютерная инди-игра в жанре песочницы. Её разработал известный программист Маркус Перссон. Первая версия игры вышла в 2009-ом, а в 2011-м была выпущена версия для компьютеров.

Игра пользуется огромной популярностью как среди взрослых, так и детей. Поэтому разработчики Майнкрафт придумали, как сделать игровой процесс ещё полезнее. Теперь вы можете создавать объекты в игре с помощью кода Python (Питон). Это один из самых популярных и востребованных языков программирования. Minecraft программирование – это прекрасная возможность познакомиться детей с программированием, не отрывая их от любимой игры.

Школа программирования для детей Pixel подготовила несколько видеоуроков по программированию в Minecraft. Данный курс разработан специально для детей и подростков от 9 лет. Также он подходит тем, кто решил делать первые шаги в программировании.

Для начала давайте установим все необходимые программы. Мы подготовили два коротких видеоролика, которые помогут разобраться в данном вопросе.

В первом видеоролике мы рассказываем, как скачать Minecraft и Python на Windows (на компьютер).

Во втором видеоролике рассказывается, как скачать Minecraft и Python на MacOS.

Теперь мы можем переходить к обучению программированию детей в Майнкрафт.

Видеоурок 1. Знакомство с языком Питон

Начинаем изучать Minecraft программирование. Во время первого урока мы научимся настраивать взаимодействие Питона с Майнкрафт, после чего напишем первый код, а также выведем сообщение в чат.

Видеоурок 2. Вывод координат персонажа в чат и цикл

Во время второго урока мы расскажем, что такое координаты и как они определяются. В конце видеоурока мы закрепим пройденный материал: зададим для нашего героя координаты с помощью кода, после чего воспользуемся циклом, который позволит нам получать данные о координатах нашего персонажа.

Видеоурок 3. Переменная, условие. Создание первой игры

Во время третьего урока мы изучим переменную и условие. В конце видеоурока мы закрепим полученные знания: напишем код, с помощью которого в чате будет выводиться количество очков.

Видеоурок 4. Создание блоков

Во время четвёртого урока мы научимся устанавливать блоки с помощью Питона: импортируем необходимые библиотеки и напишем небольшой код. Также во время урока мы расскажем об ограниченном цикле, и используя полученные знания, создадим несколько небольших построек.

Видеоурок 5. Строительство домов и улиц

На пятом уроке мы рассмотрим, что такое функция, а в конце занятия построим 12 домов на одной улице.

Видеоурок 6. Создание 2D-фигур

Во время шестого урока мы установим новые библиотеки, с помощью которых нарисуем несколько 2D-фигурок.

Видеоурок 7. Создание 3D-фигур

Седьмой урок посвящён созданию трёхмерных фигур с помощью блоков. Также во время занятия мы научимся создавать сферу.

Видеоурок 8. Создание многоугольников

Во время восьмого урока мы познакомимся с понятием массива и вектора. Для закрепления пройденного материала мы создадим многоугольную пирамиду.

Видеоурок 9. Создание ботов

На девятом уроке Minecraft программирование для детей переходит на новый уровень. Во время занятия мы расскажем, что такое искусственный интеллект и как он применяется в современных технологиях. По окончании урока мы создадим бота, который будет следовать за нашим героем и сможет определять, как далеко мы находимся от него.

Видеоурок 10. Применение случайных чисел в искусственном интеллекте

На десятом уроке мы расскажем о случайных числах и вероятности, а также научимся их использовать в ИИ. Всё это понадобится нам при создании программы, которая будет действовать, как настоящий человек.

Мы продолжаем выпускать бесплатные видеоуроки на нашем YouTube-канале: учимся создавать игры внутри Майнкрафт с помощью Пайтона. Присоединяйтесь!

***

Материал подготовлен школой программирования для детей Pixel. Мы обучаем детей и подростков от 5 до 17 лет программированию, созданию игр и сайтов, 3D-моделированию и др. Приходите к нам на продвинутые курсы учиться программировать в Minecraft на Python.

Страничка посвящена маленьким геймерам, который ищут где скачать самый что ни на есть настоящий Minecraft. Ты поймёшь, в чём различаются версии для компьютера и какая нужна тебе.  А ещё – где взять совершенно бесплатный Майнкрафт, но ненастоящий. Поделись этим с друзьями в социальных сетях, и начнём.

Где качают оригинальную версию игры

Выдумал Майнкрафт один программист в 2009 году. Он создал большую и прибыльную компанию, но через несколько лет всё это купила корпорация Microsoft. И теперь кубический мир принадлежит владельцам Windows. Официальный сайт как и прежде находится по ссылке https://www.minecraft.net/ru-ru. Это один из главных источников, где игроки могут приобрести лицензионную игру.Официальный портал Minecraft

Сколько стоит Майнкрафт для Windows 10

Ты всё правильно понял – игра не скачивается бесплатно, её нужно покупать. Она подходит для трёх компьютерных систем: Windows, Linux и MAC (Java Edition). И для всех цена будет приблизительно одинаковая – чуть менее 2 тысяч рублей.

В интернете можно найти ключи для активации игры по более низким ценам. Но стоит быть осторожным, среди продавцов немало жуликов.

Разница между Java Edition и Windows 10 Edition

Если удалось упросить родителей купить игру, предстоит выбрать издание Майнкрафта. Издания МайнкрафтСайт даёт на выбор два.

Java Edition

  • Эта платформа, на которой первый разработчик придумал игру. Истинные поклонники предпочитают классику – Джава Эдишн;
  • Немного раньше, чем на остальные платформы сюда приходят обновления;
  • Это издание поддерживает моды и игру с другими игроками только на ПК с Windows, Linux и Mac.Сравнение версий

Windows 10 Edition

  • Выбрав эту версию, можно играть с теми, кто зашёл с мобильного Android, iOS или консоли;
  • Через приложение Xbox подключается контроллер, которым вы сможете управлять Майнкрафтом на компьютере;
  • Официальные серверы для мультиплеера. Игроки по подписке могут скачивать свои «сервера»;Майнкрафт Windows Edition
  • Доступны ачивки (достижения): Начало, Горячо, Сложный блок и т.д.;
  • Education Edition – платформа для изучения разных наук, в том числе программирования прямо в игре;
  • Трассировка лучей – технология, которая делает графику более реалистичной.

В остальном выбор не столь важен. Стоит уделять внимание на то, с кем вы будете играть и на каком устройстве.

Сейчас читают: Как играть в Майнкрафт по Хамачи.

Системные требования Minecraft для компьютера

На первый взгляд простая игра с квадратными персонажами. Но чтобы поиграть в Майнкрафт без лагов, нужен самый настоящий игровой комп.

Minecraft Java Edition

Минимальные требования:

  • Процессор – Intel Core i3 3.2 ГГц или AMD A8 3.1 ГГц;
  • HD – минимум 1 Гб;
  • Оперативная память – 4 Гб;
  • Видеокарта – Radeon серии 7000 с технологией OpenGL 4.4;
  • Windows все версии, начиная с 7.Минимальные требования

Рекомендуемые требования:

  • Процессор – Intel Core i5 4690 3.5 ГГц;
  • Видеокарта – Radeon RX 200;
  • Места на диске 4 Гб. Лучше использовать SSD для ускоренного обмена данными;
  • Оперативная память – 8 Гб;
  • Windows 64 bit.

Minecraft Windows 10 Edition

Системные требования для этой редакции повторяются, за исключением ОС – необходима Windows 10. А также более мощные процессор и видеокарта для рекомендуемой конфигурации.

После входа в игру понадобится инструкция, как подключиться к другу в Майнкрафт.

Как поиграть в ненастоящий Майнкрафт бесплатно

Этим способом поиграть пользуются все нормальные люди, кому жалко отдавать за игру 2 косаря.

  1. Открываем в браузере ссылку TLauncher.Кнопка Скачать
  2. Выбираем значок Windows (если в компьютере эта система).
  3. Открываем лаунчер, нажимаем продолжить и устанавливаем как и прочие игры на компьютере.Установка Майнкрафт
  4. Это Java Edition, поэтому в клиенте должна быть установлена галочка Скачать Java. Без неё Майнкрафт на компьютере работать откажется.Процесс установки
  5. Если вы случайно пропустили пункт с загрузкой Джава, то скачать программный пакет можно из сайта – Java.
  6. Клиент запустится сам.Запущенный TLauncher

В окне лаунчера всё-всё расписано. Вверху находится список серверов для подключения. Справа в меню есть детальная инструкция, как пользоваться ТЛаунчером. Для входа в игру нужно сделать несколько шагов. А именно – ввести имя игрока, выбрать версию и нажать на кнопку Установить.

Какой выбрали Minecraft, настоящий или нет – пишите в комментариях. Наше сообщество в ВК.

Minecraft – особенная компьютерная игра: и для опытных, взрослых геймеров и для детей – начинающих любителей компьютерных развлечений. За привычным названием этой игры, которая в переводе с английского языка означает «шахтерское ремесло», скрывается целая Вселенная. Но не обычная, а кубическая, где простейшим элементом конструирования является куб, из которого можно строить самые разнообразные предметы, сооружения и объекты. В кубическом мире можно исследовать пещеры, где спрятаны сокровища, сражаться с зомби, зайти на сервер и делать ловушки.

Созданный 18 ноября 2011 года Майнкрафт отмечает в этом году 10-летний юбилей. Но, как и в начале своего создания, он до сих пор увлекает миллионы поклонников-геймеров по всему миру. В Майнкрафте отсутствует агрессия и жестокость. Здесь каждый игрок выступает в роли создателя своего мира, который так интересно исследовать, преображать и улучшать… И такие безграничные возможности открываются благодаря кропотливому труду программистов, которые создали этот удивительный продукт. Какой же язык использовался для разработки Minecraft и чем эта игра интересна ребятам, которые занимаются программированием? 

C++ или Java Edition?

Сначала для создания Майнкрафта был использован Java. Популярность этой компьютерной игры вызывает интерес к профессиональному программированию у многих любителей IT-развлечений. С использованием Java было создано большое количество модов и плагинов, которые сделали игру по-настоящему захватывающим приключением. Но в 2017 году разработчики приняли решение написать версию Майнкрафта на языке С++. Для этого были свои причины: 

  1. Java не предназначен для объединения всех версий игры, и пользователи не могли играть в любимую игрушку на iOS. 
  2. Благодаря использованию языка С++, программистам удалось достичь кроссплатформенности этой любимого многими IT-продукта. 
  3. В настоящее время доступны две версии Minecraft: базовая, написанная на С++, и дополнительная, для написания которой использовался Java Edition.      

На базе любимой компьютерной игры созданы множество курсов по детскому программированию. Находясь в увлекательной игровой среде, ребенок учится программировать: разрабатывать интересные сценарии, создавать персонажи, экспериментировать с локациями, писать свои моды. 
В школе программирования It future для этого используется компьютерная программа Scratch на русском языке, основанная на работе с блоками разных форм и цветов. Обучение в игровой форме вдохновляет ребенка проявлять творческие способности, знакомиться с базовыми алгоритмами программирования и изучать более сложные языки программирования – например, Python.

Мы начинаем серию уроков, ориентированную на то, чтобы научить вас создавать простую Minecraft-подобную игру, а также изучить различные аспекты движка Unity3D. Так как это вводный урок, алгоритмы и структура объектов, представленные в этой серии, не самые эффективные.

Приступаем к разработке

Скачайте последнюю версию Unity3D отсюда.

Скачайте текстуры, которые вам потребуются в процессе разработки проекта, описанного в этом руководстве.

  • Текстуры куба:
    • 16×16;
    • 32×32;
    • 64×64;
    • 128×128;
    • 256×256;
    • 512×512;

    Вы можете использовать любое из предложенных разрешений. Вы также можете скачать оригинал:

    • верхняя часть;
    • боковая часть;
    • нижняя часть;
  • Текстуры skybox: красивый пакет текстур можно скачать отсюда.

Для начала давайте познакомимся с Unity3D. Когда Вы запустите Unity3D в первый раз, всплывет окно Project Wizard. Вы можете импортировать один из встроенных пакетов Unity. Пакеты — это коллекции различных файлов (кода, моделей, аудио-файлов, текстур и т.д.), которые хранятся в виде иерархической структуры, инкапсулированной в файлы с расширением .unitypackage. Пакеты могут быть экспортированы из любого Unity-проекта. Таким образом можно очень просто переносить различные файлы между проектами, сохраняя их иерархию. Сейчас нам не нужно импортировать какие-либо пакеты.

1_project_wizard

Окно Unity Project Wizard

После того, как вы зададите путь для нового проекта, нажмите кнопку Create, чтобы завершить создание проекта. Если Вы открыли Unity и создали проект заблаговременно, вы всегда можете создать новый проект, нажав File → New Project, чтобы вызвать окно Project Wizard.

2_file_newproj

Создание нового проекта Unity

Интерфейс Unity разделен на несколько вкладок:

  • Вкладка Project содержит все ресурсы, используемые в игре. Для опрятности рекомендуется, чтобы все файлы проекта находились в папках с соответствующими именами (Materials, Textures, Models, Prefabs и т.д.). Это окно показывает, как файлы хранятся на вашем жестком диске, но очень важно, чтобы любые изменения файлов проекта были сделаны из вкладки Project, а не из Проводника, иначе Вы рискуете необратимо потерять связь между файлами.
  • Вкладка Console отображает полезные отладочные сообщения. Если у вас есть минимальный опыт в программировании, вы, вероятно, знаете, почему именно они полезны.
  • Вкладка Inspector показывает различные компоненты, содержащиеся в объектах из вкладок Hierarchy или Project. Вы можете модифицировать любые значения редактируемых объектов отсюда.
  • Вкладка Hierarchy содержит список названий всех объектов, расположенных на текущей сцене.
  • Вкладка Scene показывает игровой мир с произвольной точки (отличной от точки, в которой расположена главная игровая камера). Вы можете изменить позицию этой камеры с помощью клавиш W, S ,A, D и правой кнопки мыши.
  • Вкладка Game показывает, что происходит, когда вы начинаете игру, с точки зрения игровой камеры. В отличие от вкладки Game, вкладка Scene отображает сетку.

Вы можете расположить вкладки, как вам удобно, перетащив их мышкой в нужное место.

3_fullwindow

Интерфейс Unity

Любой объект или скрипт, добавленный в проект, может быть сохранен в файле сцены с расширением .unity. Сцены идентичны игровым уровням. Unity-разработчик может разместить игровые файлы на отдельную сцену, когда это необходимо, и загрузить их во время выполения кода. Любой проект может содержать несколько сцен. Чтобы сохранить текущую сцену, нажмите  File → Save Scene / Save Scene as… и наберите название в окне проводника.

4_savescene

Сохранение сцены

Сохраните ее в папке Assets — корневой папке Unity-проекта.

5_savescene2

Именование сцены

Если вы откроете папку Assets во вкладке Project, вы можете обнаружить там только что созданную сцену. Кликните здесь правой клавишей мыши и создайте три новых папки: Code, Materials и Textures, как показано на картинке:

6_createfolder

Создание новой папки

7_folders

Необходимые папки

Теперь мы готовы начать! Перетащите текстуры куба и скайбокса в папку Textures.

8_textures

Импортированные в проект текстуры куба и скайбокса

Затем зайдите в папку Materials и создайте четыре материала:

  • SkyboxMaterial,
  • BottomMaterial,
  • SideMaterial,
  • TopMaterial.

Материалы добавляют цвета на 3D-объекты с помощью программ, называемых шейдерами и обрабатываемых на GPU. Больше информации о материалах Unity и шейдерах вы можете получить здесь. Три материала, которые мы создали, будут применены к сторонам куба, который мы создадим в следующем разделе.

9_createmat

Создание нового материала

10_materials

Материалы для скайбокса и сторон куба

Кликните левой кнопкой мыши на BottomMaterial. Во вкладке Inspector кликните по кнопке Select, расположенной в компоненте Texture материала, а затем, во всплывшем окне, выберите текстуру bottom.

11_material_no_texture

Обззор материала во вкладке Inspector

12_picktex

Выбор компонента текстуры

Затем выберите соответствующие текстуры для SideMaterial и TopMaterial, как показано на картинке ниже.

13_voxelmaterials

Материалы куба с загруженными текстурами

Если вы хотите, чтобы на заднем плане отображался красивый пейзаж, вы можете добавить скайбокс. Для этих целей мы создали SkyboxMaterial, на который мы наложим шесть оставшихся текстур из папки Textures.

Нажмите левой кнопкой мыши на SkyboxMaterial. Во вкладке Inspector, рядом с меткой Shader, кликните на выпадающий список и выберите RenderFX → Skybox. Это встроенные в Unity шейдеры, которые имплементируют базовые (модель освещения Блинна-Фонга, рельефное текстурирование, отражения, прозрачность и т.д.) и несколько продвинутых шейдеров, таких как параллакс-эффект. Вы также можете писать свои шейдеры и добавлять их в проект.

14_skyboxmat

Выбор шейдера для отрисовки скайбокса

Далее, по аналогии с материалами сторон куба, описанными выше, нам нужно добавить шесть skybox-текстур в соответствующие места.

15_skyboxtexturesmat2

Выбор подходящих текстур скайбокса

Далее, мы должны добавить скайбокс на нашу сцену. Перейдите в Edit → Render Settings. Во вкладке Inspector, рядом с меткой Skybox Material, нажмите на маленький кружок справа и выберите SkyboxMaterial из материалов проекта.

16_renderskybox21

Выбор материала скайбокса в RenderSettings

Если мы приглядимся, мы можем обнаружить грани skybox-куба. Этого можно избежать с помощью наложения текстур. Когда текстура наложена на другую, пиксели, расположенные на краях текстуры, повторяются, заполняясь цветом краев модели, на которой они расположены. Больше информации о наложении текстур можно получить здесь.

17_unclamp

Типичное поведение неналоженных текстур

Перейдите в папку Textures во вкладке Project, выберите все изображения, в пункте Wrap Mode выберите Clamp из выпадающего списка и нажмите Apply.

18_clamp

Установка Wrap Mode для всех текстур проекта

Создаем куб

Было бы очень заманчиво использовать встроенный примитив Unity — куб — как основу для кубов Minecraft, и расположить соответствующие текстуры из текстурного атласа на стороны куба, используя UV-преобразования, но в этом руководстве мы будем придерживаться простых методик (с наименьшим количеством внешних ресурсов) и будем использовать отдельные меши для каждой стороны.

В верхнем левом меню кликните на GameObject → Create Other → Quad. Повторите это действие еще пять раз (нам нужно создать шесть сторон куба).

19_quads

Создание граней куба

Теперь назовите каждую из шести сторон соответствующим именем:

TopBottomRightLeftFrontBack.

Объекты, расположенные на сцене, называются GameObject. Чтобы переименовать GameObject, кликните правой клавишей мыши на нем во вкладке Hierarchy и нажмите Rename.

20_rename

Переименование граней куба

Если вы только начинаете знакомиться с Unity, вам крайне рекомендуется ознакомиться с навигацией в окне Scene и позиционированием GameObject, прежде чем идти дальше.

После создания игровые объекты будут размещены на сцене случайным образом (на самом деле, новые GameObject расположены в точке текущего расположения камеры). Мы должны расположить все стороны куба. Чтобы выровнять их, во вкладке Hierarchy кликните на каждую сторону и модифицируйте её позицию и вращение во вкладке Inspector таким образом:

22_pos_rot_faces

Преобразование значений для каждой грани

Вуаля! Наш серый куб готов:

21_faces

Обычный серый куб

Если куб не центрирован в окне Scene, дважды кликните на одной из его сторон во вкладке Hierarchy, чтобы выровнять камеру.

Во вкладке Project зайдите в папку Materials. Чтобы создать красивый пиксельный куб, мы должны переместить следующие материалы:

  •  TopMaterial на верхнюю сторону,
  •  BottomMaterial на нижнюю сторону,
  •  SideMaterial на левую, правую, заднюю и переднюю сторону во вкладке Hierarchy.

23_dragdrop_mouse

Применяем материалы к GameObject’ам на сцене

Вот результат:

24_voxel

Куб с текстурами

Замечательно! Выглядит, как куб из Minecraft, но сейчас у нас есть шесть разделенных частей, а не автономный GameObject, который мы могли бы разместить на нашей сцене. Мы будем использовать простую систему иерархий Unity, чтобы переместить эти части в один GameObject. Она позволяет любому GameObject стать потомком другого GameObject на сцене с помощью простого перетаскивания объекта-потомка на желаемый объект-родитель. Это чрезвычайно удобно, потому что Transform потомка (позиция, вращение и масштаб объекта) станет относительным родительскому объекту.

В левом верхнем меню выберите Game Object → Create Empty. Это действие создаст пустой GameObject, который будет содержать только компонент Transform.

25_createempty

Создание пустого GameObject

Кликните правой кнопкой на объекте и переименуйте его:

26_voxel

Переименование пустого GameObject

Кликните левой кнопкой на объекте и измените его позицию на (0,0,0).

27_position000

GameObject размещён в центре сцены

Теперь выберите шесть сторон куба и перетащите их в новый пустой GameObject.

28_finalvoxel_mouse

Сборка куба

Если вы обнаружили ошибки, как на картинке ниже, учтите, что это обычное явление, когда вы вручную меняете иерархию GameObject. Просто нажмите Clear on Play во вкладке Console, чтобы очистить лог ошибок, когда запускаете игру.

part2_feedback1

Типичная ошибка

Куб готов! Не забудте сохранить сцену!

32_transforms

В следующей части мы завершим создание нашей игры.

Перевод статьи «Build Minecraft in Unity»

Понравилась статья? Поделить с друзьями:

Не пропустите и эти статьи:

  • Как написать насмарку
  • Как написать наследство на машину
  • Как написать народные приметы
  • Как написать нараспашку правильно
  • Как написать наравне со взрослыми правильно

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии