Как сделать стенку в юнити

Туториал 5: 2Д игра платформер (урок для начинающих). Часть 2.

Введение:

Как сделать стену:

Как собирать и подсчитывать монеты:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CoinController : MonoBehaviour <

//звук сбора монеты
public AudioClip CoinSound;
//переменная количества собранных монет
public int coin;

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//эта библиотека нужна для работы с интерфейсом
using UnityEngine.UI;

public class CoinController : MonoBehaviour <

//ссылка на объект с текстом
public GameObject TextObject;
//ссылка на текстовый компонент
Text textComponent;
//звук поднятия монеты
public AudioClip CoinSound;
//переменная подсчета монет
public int coin;

//запустится один раз при запуске скрипта
void Start () <
//делаем линк на текстовый компонент, который находится на текстовом объекте
textComponent = TextObject.GetComponent Text > ();
>

Как сделать яму:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//это библиотека для работы со сценами
using UnityEngine.SceneManagement;

public class DeadEndController : MonoBehaviour <

Как сделать простого врага:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//библиотека для управления сценами
using UnityEngine.SceneManagement;

public class MushroomController : MonoBehaviour <

//как далеко гриб может отойти от начальной точки
public float distanceToRun;
//скорость движения
public float speed;
//направление взгляда гриба
public bool isLookingLeft = true ;
//стартовая позиция
Vector3 startPos;
//линк на компонент Rigidbody2D
Rigidbody2D rb;

//выполнится 1 раз при старте игры
void Start () <
//делаем линк на Rigidbody2D компонент
rb = GetComponent Rigidbody2D > ();
//запоминаем стартовую точку гриба
startPos = transform.position;
//будем сравнивать квадрат вектора расстояния с квадратом расстояния
//так как извлечение корня медленный процесс
distanceToRun = distanceToRun * distanceToRun;
>

//запустится, если другой коллайдер попал в триггер
void OnTriggerEnter2D ( Collider2D other) <
//проверить, что у коллайдера тэг Player
if (other.tag == «Player» ) <
//удалить гриб
Destroy (gameObject);
>
>
>

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ExplosionsDestroyer : MonoBehaviour <

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//библиотека для управления сценами
using UnityEngine.SceneManagement;

public class MushroomController : MonoBehaviour <

//префаб взрыва
public GameObject Explosion;
//звук взрыва
public AudioClip Boom;
//как далеко гриб может отойти от начальной точки
public float distanceToRun;
//скорость движения гриба
public float speed;
//направление взгляда гриба
public bool isLookingLeft = true ;
//стартовая позиция гриба
Vector3 startPos;
//линк на компонент Rigidbody2D
Rigidbody2D rb;

//выполнится один раз при старте гриба
void Start () <
//делаем линк на компонент Rigidbody2D
rb = GetComponent Rigidbody2D > ();
//запоминаем стартовую позицию гриба
startPos = transform.position;
//будем сравнивать квадрат вектора расстояния с квадратом расстояния
//так как извлечение корня медленный процесс
distanceToRun = distanceToRun * distanceToRun;
>

Восприятие звука:

Как сделать движущуюся платформу:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlatformMoving : MonoBehaviour <

//скорость движения платформы
public float speed;
//позиция, где платформа должна повернуть назад
public Transform endPoint;
//позиция начала движения
Vector3 startPoint;
//ссылочная переменная для компонента Rigidbody2D
Rigidbody2D rb;
//скорость платформы в текущий момент
float currentSpeed;

//выполнится при запуске скрипта
void Start () <
//запомнит стартовую точку платформы
startPoint = transform.position;
//сделать ссыдку на Rigidbody2D
rb = GetComponent Rigidbody2D > ();
//начальное направление движения
currentSpeed = speed;
>

Как добавить физические объекты:

Конец уровня:

Как сделать движущийся фон с эффектом параллакс:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Parallax : MonoBehaviour <

//ссылочная переменная на игрока
GameObject player;
//позиция игрока в предыдущем кадре
//и разница в позиции между кадрами
Vector3 lastPos, offset;
//скорость движения фона
public float speed;

Как добавить фоновую музыку:

Теперь простое. Импортируйте звуковой файл Music. Выберите Rat в иерархии. Перетащите Music на Rat ы иерархии (или добавьте Audio Source и поместите Music в поле AudioClip field). Включите Loop.

Проверьте сцену.

Источник

Быстрый старт

Для начала скачайте архив, приложенный здесь. Откройте и закиньте содержимое в папку Assets вашего проекта.
В вашем проекте после рекомпила появится пункт меню «GameObject/Create Advanced/Wall Constructor».

Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити

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

После того, как вы все установили нажмите кнопку «Начать редактирование».

Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити

Подвиньте его куда захотите. Собственно вот наша стена и растянулась.

Теперь переключитесь обратно на точку «2». Данная точка теперь не находится с краю и может быть использована как центр кривой. Нажмите кнопку «Сделать центром кривой» в инспекторе. После нажатия ваша стена преобразится в кривую.

Теперь вернитесь на точку 3.
Предположим, что вам нужно изменить высоту стены в данной точке.
Подкрутите немного ползунок «Смещение высоты» вверх или вниз и стена деформируется.

Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити прямая Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити безье Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити изменение высоты

Новый объект создается через пункт меню «GameObject/Create Advanced/Wall Constructor».

Точки

Разные точки в генераторе имеют разную специфику. Порядок точек точно такой же как отображается в иерархии.
Итак:

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

Точки имеют поле «Высота смещения», которое влияет на то, насколько смещается высота относительно общей величины, указываемой в самом компоненте-генераторе.

Генератор

Сам генератор имеет следующие поля:

Источник

Создание Стен

Отталкивание объекта от стен
Добрый день! Не так давно занимаюсь разработкой в Unity и возник следующий вопрос: как можно.

Необходимо создать прозрачность стен
Делаю бродильню, сделал начальное «как по учебнику». Но наткнулся на проблему: надо чтобы.

Непонятка с освещением и притяжением стен
Привет. У меня есть плавный переход между 2-мя сценами, и я добавил возможность управления шариком.

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

Решение

по моему нужно еще и длину задавать плейнам по числу метров. локал скейл (нужная ось) = 7f;

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

Как сделать движение объекта вверх вдоль стен
Допустим объекту надо прыгать от одной стены к другой, какие вообще способы есть? Если бы я делал я.

Создание стен в игре
В общем, я решился создать простую игру бродилку по лабиринту, и сделать это как можно красивее в.

Создание стен из picturebox для игры
Игра являет собой подобие Танчиков на Денди, каждый элемент в ней реализован с помощью PictureBox.

Создание «стен»(границ) у panel
Здравствуйте! Помогите пожалуйста. У меня такая проблема: У меня картинки падают вниз и рандомно.

Текстурирование стен
Какой режим надо установить в OpenGL, чтобы при наложении текстуры она накладывалась также, как.

Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити[2D] обход стен
Пишу что-то на подобии 2Д «игры». Кое-как но что-то уже написано. Иными словами я новичок в 2д.

Источник

Как сделать стену в unity 2d

Unity3D: вопрос новичка по поводу создания стен

Привет всем!
В unity есть примитив Quad, с его помощью вообщем-то можно создавать стены в уровне путем его масштабирования. Так вот, так и не смог выяснить влияет ли масштабирование на производительность. Экспериментировал создавая 1000 стен, что масштабировал, что нет. Проседание fps, как я понял, преимущественно зависит от размера самой стены.
Теперь создаю уровни в Unity. Стены в уровнях создал с помощью quad-ов. Разуно ли это? Не правильней будет создать модель, затем ее отмасштабировать в настройках импорта и использовать вместо работы с Quad (хотя это хлопотней)?

Alerr
> влияет ли масштабирование на производительность

> Стены в уровнях создал с помощью quad-ов. Разуно ли это?

Executor, спаибо. Так бы начал воротить, а потом думать что сделал.

Туториал 5: 2Д игра платформер (урок для начинающих). Часть 2.

Добавьте этот скрипт к крысе. Импортируйте звук CoinSound в проект. Выберите крысу в иерархии и поместите CoinSound в поле Coin Sound (чейчас мы используем 3Д позиционирование звука и он будет относительно тихим, так как восприятие звука находится на камере. Мы потом переделаем Audio Listener для более правильного звука).

Выделите Canvas в иерархии. Измените UI Scale Mode на Scale With Screen Size и Screen Match Mode на Expand. С этими параметрами будет неплохое скалирование размера интерфейса на разных экранах.

Сцена и интерфейс теперь находятся в одном экране. Сделайте двойной клик на Canvas в иерархии. Камера сфокусируется на белом прямоугольнике. Этот прямоугольние представляет как будет выглядеть экран в игре.

Выберите Text в иерархии. Сделайте его больше и перетащите на то место, где он должен отображаться. Измените привязку на право-вверх. Измените Text на 0. Alignment на середину. Включите Best Fit (заполнение пространства). Измените Max Size на что-то около 100. Настройте Color по желанию.

Нам нужен скрипт для управления текстом. Откройте снова скрипт CoinController.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//эта библиотека нужна для работы с интерфейсом
using UnityEngine.UI;

public class CoinController : MonoBehaviour

//ссылка на объект с текстом
public GameObject TextObject;
//ссылка на текстовый компонент
Text textComponent;
//звук поднятия монеты
public AudioClip CoinSound;
//переменная подсчета монет
public int coin;

//запустится один раз при запуске скрипта
void Start () //делаем линк на текстовый компонент, который находится на текстовом объекте
textComponent = TextObject.GetComponent ();
>

Сфокусируйте камеру назад в сцену (сделайте двойной клик по крысе в иерархии). Выберите Rat в иерархии. У скрипта CoinController пояаилось новое поле Text Object. Поместите объект Text в это поле. Интерфейс теперь должен отображать значение переменной сбора монет. Запустите игру и проверьте это.

Как сделать яму:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//это библиотека для работы со сценами
using UnityEngine.SceneManagement;

public class DeadEndController : MonoBehaviour

Выберите DeadEnd в иерархии и добавьте этот скрипт. Создайте префаб DeadEnd (перетащите DeadEnd из иерархии в Assets.)

Как сделать простого врага:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//библиотека для управления сценами
using UnityEngine.SceneManagement;

public class MushroomController : MonoBehaviour

//как далеко гриб может отойти от начальной точки
public float distanceToRun;
//скорость движения
public float speed;
//направление взгляда гриба
public bool isLookingLeft = true ;
//стартовая позиция
Vector3 startPos;
//линк на компонент Rigidbody2D
Rigidbody2D rb;

//выполнится 1 раз при старте игры
void Start () //делаем линк на Rigidbody2D компонент
rb = GetComponent ();
//запоминаем стартовую точку гриба
startPos = transform.position;
//будем сравнивать квадрат вектора расстояния с квадратом расстояния
//так как извлечение корня медленный процесс
distanceToRun = distanceToRun * distanceToRun;
>

//запустится, если другой коллайдер попал в триггер
void OnTriggerEnter2D ( Collider2D other) //проверить, что у коллайдера тэг Player
if (other.tag == «Player» ) //удалить гриб
Destroy (gameObject);
>
>
>

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ExplosionsDestroyer : MonoBehaviour

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//библиотека для управления сценами
using UnityEngine.SceneManagement;

public class MushroomController : MonoBehaviour

//префаб взрыва
public GameObject Explosion;
//звук взрыва
public AudioClip Boom;
//как далеко гриб может отойти от начальной точки
public float distanceToRun;
//скорость движения гриба
public float speed;
//направление взгляда гриба
public bool isLookingLeft = true ;
//стартовая позиция гриба
Vector3 startPos;
//линк на компонент Rigidbody2D
Rigidbody2D rb;

//выполнится один раз при старте гриба
void Start () //делаем линк на компонент Rigidbody2D
rb = GetComponent ();
//запоминаем стартовую позицию гриба
startPos = transform.position;
//будем сравнивать квадрат вектора расстояния с квадратом расстояния
//так как извлечение корня медленный процесс
distanceToRun = distanceToRun * distanceToRun;
>

Импортируйте звуковой файл Boom в Assets. Выберите Enemy в иерархии. У Mushroom Controller появилось два новых поля в скрипте. Поместите префаб Explosion в Explosion поле. Поместите аудиофайл Boom в поле Boom. Сделайт префаб Enemy. проверьте сцену.

Восприятие звука:

По стандарту, Audio Listener (компонент отвественный за восприятие звука) прикреплен к Main Camera. Audio Listener можно представить как виртуальные уши. Смотрите Unity Documentation для подробностей. Надо передвинуть этот компонент к крысе. Выберите Main Camera (дочерний объект крысы) ит отключите Audio Listener в Inspector (нам нужен только один такой компонент в сцене).

Выьерите Rat в иерархии и добавьте Audio Listener к ней.

Как сделать движущуюся платформу:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlatformMoving : MonoBehaviour

//скорость движения платформы
public float speed;
//позиция, где платформа должна повернуть назад
public Transform endPoint;
//позиция начала движения
Vector3 startPoint;
//ссылочная переменная для компонента Rigidbody2D
Rigidbody2D rb;
//скорость платформы в текущий момент
float currentSpeed;

//выполнится при запуске скрипта
void Start () //запомнит стартовую точку платформы
startPoint = transform.position;
//сделать ссыдку на Rigidbody2D
rb = GetComponent ();
//начальное направление движения
currentSpeed = speed;
>

Создайте новый пустой объект (empty).
Назовите его endPoint. Добавьте к нему иконку для лучшего вида. Поместите endPoint над Platform (испольуйте инструмент движения).

Выберите Platform в иерархии. Добавьте скрипт PlatformMoving. Измените Speed на 1. Поместите endPoint в поле End Point.

Запустите игру и проверьте (можете переключить на сцену, пока игра запущена).

Поместите wall в сцену справа от платформы. Выьерите эту стену в иерархии и добавьте Box Collider 2D.

Поместите следующий Dead End префаб в сцену под двигающейся платформой. Нажмите на Edit Collider и настройте размер.

Как добавить физические объекты:

Импортируйте картинку Box из скачанного архива. Поместите спрайт Box в сцену (на движущуюся платформу). Выьерите Box в иерархии. Измените Tag и Layer на Ground. Смените Z-позицию на 0. Добавьте Rigidbody 2D. Измените Interpolate на Interpolate. Добавьте Box Collider 2D.

Теперь сможете взаимодействовать с этим объектом.

Конец уровня:

Добавьте Ground префаб в сцену, где платформа перестаёт двигаться наверх (смотрите скриншот). Добавьте последнбб стену (поместите спрайт wall в сцену и добавьте Box Collider 2D ).

Импортируйте картинку Exit в Assets. Добавьте спрайт Exit в сцену возле последней стены. Крыса не должна допрыгивать до Exit, если она просто прыгает с пола. Boxпонадобится как подставка. Выберите Exit в иерархии. Добавьте Box Collider 2D. Включите Is Trigger. Добавьте Dead End Controller. У нас сейчас нет следуюшего уровня, поэтому просто перезагрузим сцену.

Как сделать движущийся фон с эффектом параллакс:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Parallax : MonoBehaviour

//ссылочная переменная на игрока
GameObject player;
//позиция игрока в предыдущем кадре
//и разница в позиции между кадрами
Vector3 lastPos, offset;
//скорость движения фона
public float speed;

Как добавить фоновую музыку:

Теперь простое. Импортируйте звуковой файл Music. Выберите Rat в иерархии. Перетащите Music на Rat ы иерархии (или добавьте Audio Source и поместите Music в поле AudioClip field). Включите Loop.

Как сделать стены в UNITY 5

Засунь на terrain модель, например, куб и дай ей компонент box collider, чтобы сквозь стену нельзя было бегать.

А как их не зделать? В чём конкретно вопрос, где описованния ситуации? Где скриншот примера?

Ivan ZuevУченик (90) 5 лет назад

НУ Я ПОСТАВИЛ TERRARIN И ЩАС ХОЧЮ УЗНАТЬ КАК ПОСТАВИТЬ СТЕНЫ НА TERRARIN

windows30 dey Мыслитель (5912) понятия как стены в unity нет, или создавай пустой объект и в нём растовляй колизию плоскую там где стены, либо исопльзуй те-же коробки или plane для стен

Unity 2D Top-Down (Основы) Прозрачные стены.

Я только начал изучать Unity и я хочу сделать что-то наподобие 2D игры с камерой Top-Down. Сам вопрос, как сделать так, чтобы персонаж при движении не проходил через стены? Я пробовал разные варианты передвижения и само собой у меня стоят: rigidbody на игроке и коллайдеры на стене и игроке. Можете подсказать как сделать стены «твердыми». Возможно те варианты скриптов были неверны и я прошу ссылку или скриншот верных кодов) или же ошибка в самом юнити?

Unity 2D Как сделать что бы игрок мог заходить визуально за «стену»?

Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити

T1cKz @T1cKz Автор вопроса

2d на Unity3d

Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити

Источники информации

Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити

Что понадобится

Условия использования кода

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

Условие только одно: при использовании кода (в том числе модифицированного) в коммерческом проекте необходимо указать ссылку на автора (т.е. fischer — меня).

Код примера, используемого в статье, можно скачать отсюда.

Настройка камеры

Для начала создайте пустую сцену без объектов. Удалите объект MainCamera, добавленный по умолчанию.

Для 2d-графики положение спрайтов в пространстве не важно. На много важнее, как спрайты друг друга перекрывают. Камера поддерживает два режима (вида проекции): перспективный (Perspective) и ортогональный (Orthographic). Первый используется во всех 3d-играх: объекты, расположенные дальше от камеры, выглядят меньше. Это почти то, как мы видим наш мир. Нам нужен второй режим, Orthographic – объекты всегда рисуются реального размера и перекрывают друг друга в зависимости от расстояния до камеры. Идеальный режим камеры для 2d и изометрии. В окне Inspector в компоненте Camera вновь созданного объекта в поле Projection выберите Orthographic. При этом некоторые параметры (соответствующие Perspective-режиму) пропадут, но появится параметр Size – размер ортогональной камеры.

Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити

Теперь настроим камеру так, чтобы каждый пиксель на экране соответствовал одной единице (unit) пространства в Unity. В дальнейшем это будет удобно при перемещении спрайтов и задании их размеров в пикселях. Для этого размер ортогональной камеры (параметр Size) должен равняться половине высоты экрана в пикселях. Например, если это экран iPhone 3G в портретном режиме, разрешение экрана которого 320×480, то Size = h/2 = 480/2 = 240.

Для того чтобы каждый раз не делать всего этого вручную, напишем скрипт:

Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити

Улучшения

Спрайт

Спрайт — прямоугольник с наложенной на него текстурой. Договоримся, что он по умолчанию будет расположен в плоскости XOY. Тогда за взаимное расположение спрайтов (слои) будет отвечать координата Z.

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

Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити

Спрайт будет задаваться несколькими параметрами:

    zero – положение нулевой точки спрайта относительно его нижнего левого угла. Измеряется в долях спрайта, т.е. (0.5, 0.5) – это центр спрайта. Нужен для правильного смещения спрайта в не зависимости от того, как он расположен на текстуре.
    Подсказка: чтобы в редакторе увидеть на спрайте оси поворота/перемещения именно в нулевой точке, а не в центре (по умолчанию), необходимо на элементе управления Transform Gizmo Toggles панели инструментов выбрать Pivot.

Чтобы нарисовать меш, понадобятся компоненты MeshRenderer и MeshFilter. Первый компонент содержит ссылки на материалы текстур для спрайта. Второй из них содержит объект MeshFilter.mesh, который он и рисует. Для изменения спрайта нужно, соответственно, изменять этот объект. Сам спрайт реализуется через компонент SampleSprite. Для того чтобы у спрайта эти два компонента были всегда, добавим ему соответствующие атрибуты RequireComponent:

Атрибут AddComponentMenu добавляет в меню Component редактора пункт Sprites->Sample Sprite. Используя его можно добавить к любому объекту Unity наш компонент SampleSprite.

Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити

Для того чтобы можно было видеть спрайт во время редактирования, атрибут ExecuteInEditMode позволяет вызывать функции Awake и Start класса SampleSprite прямо в редакторе. Внутри этих функций создается меш:

При инициализации меша нужно учитывать флаг pixelCorrect. Проверяем, во сколько раз высота экрана отличается от размера камеры — во столько раз нужно увеличить меш, учитывая, что при нормальном варианте (высота экрана равна удвоенному размеру ортогональной камеры) размер меша равен размеру области текстуры для спрайта:

NonNormalizedTextureCoords – текстурные координаты в пикселях. Определяются через нормализованные текстурные координаты (параметр спрайта) и размер самой текстуры TextureSize:

Заметьте, что меш инициализируется в функции Start, потому что при его инициализации используется информация из камеры, а она инициализируется нами в Awake, т.е. в Start такая информация уже доступна для других объектов (в Unity сначала вызываются все Awake, затем все Start, но порядок вызова одной и той же функции для различных объектов не определён). Так же в этом примере используется Camera.main — главная камера на сцене. Т.е. наша камера должна быть помечена тегом MainCamera.

Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити

В принципе, на этом этапе со спрайтом уже можно работать. Для этого к любому объекту нужно прикрепить компонент SampleSprite (например, через меню Component или перетянув на него файл скрипта). Автоматически к нему добавятся компоненты MeshFilter и MeshRenderer. Теперь если перетянуть на этот объект материал текстуры (или текстуру, а материал создастся автоматически), и настроить параметры, то можно будет увидеть готовое 2d-изображение.

Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити

Настройка параметров текстуры
Освещение

Использование возможностей редактора

Внимание: все скрипты, связанные с редактором, должны располагаться в папке Assets/Editor.

Редактируемые параметры добавим в класс SampleSprite и сделаем их условно-компилируемыми (чтобы этот код не попал в конечный продукт, а работал только в редакторе):

В данном случае параметр Zero измеряется в тех же единицах, что и size, а TextureCoords – в пикселях текстуры.

Оптимизация, улучшения и прочее

Уменьшение числа Draw Calls
Некоторые улучшения кода
Как делать анимации

Как делать полноценные спрайтовые анимации можно посмотреть на примере SpriteManager.
В нашей игре Papa Penguin спрайтовых анимаций не было. Вместо этого, например, пингвин скреплялся из частей по нулевым точкам спрайтов, а движение этих частей осуществлялось с помощью компонента Animation. Этого вполне хватило. В Unity это очень мощный инструмент. В анимацию, например, можно вставлять даже вызовы функций из скриптов.

Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити

2d-физика

Как сделать стенку в юнити. Смотреть фото Как сделать стенку в юнити. Смотреть картинку Как сделать стенку в юнити. Картинка про Как сделать стенку в юнити. Фото Как сделать стенку в юнити

Физика Unity3d предлагает также другие богатые возможности: силы, приложенные к определенным точкам объекта, гравитация, точки соединения (Fixed Joint, Spring Joint). Используя все это, можно создать неплохую игру, основанную на физике.

Альтернативы

Заключение

Всего того, о чем я написал, вполне хватит для написания своей 2d-системы и последующего ее использования при создании двухмерной игры. Трехмерность движка и поддержка физики предлагает нам новые богатые возможности, а высокая скорость разработки на Unity (что является большим плюсом движка) позволит сократить затраты.

Выход за стену Unity 5

Можно как нибудь сделать так чтобы оно не при каких обстоятельствах не могло пройти через стену? Стены разумеется с Box Collider 2d и Rigidbody 2d

Рисуем грид-карту в Unity, используя Tilemap (Unity 2D)

В прошлый раз я реализовал грид-карту, используя двумерные массивы, TextMesh объекты и Debug.DrawLine. Сегодня я продолжаю свои эксперименты в Unity, и покажу новую реализацию с использованием Tilemap.

При помощи великой программы paint, y я создал три прекрасных спрайта, которые буду использовать далее в проекте.

Закидываем их все в Assets/Sprites.

Создаём Tilemap и палитру

Создадим новый объект Tilemap, используя меню в окне иерархии.

Мы можем поменять высоту и ширину тайлов через окно инспектора (Scale), однако для данного проекта оставим значения по-умолчанию: высота и ширина равны 1.

Создаём новый слой Tilemap и выбираем его.

Не забываем добавить в Tilemap компонент Tilemap Collider 2D.

Создаём новую палитру LevelPalette и сохраняем её в Assets/Palettes.

Создание кастомных тайлов (необязательная часть)

В Assets/Scripts создаём новый скрипт под именем CustomTile.

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Tilemaps; // Создаём новый пункт меню для CustomTile [CreateAssetMenu(fileName = «new CustomTile», menuName = «Tiles/CustomTile»)] public class CustomTile : Tile >

Теперь мы можем создавать новые тайлы из меню Assets.

Создадим три новых тайла в Assets/Tiles, и назовём их Grass, Water, Wall.

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

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

Если же нет, то веделяем спрайты grass, wall и water, и перетаскиваем их в ранее созданную палитру, и сохраняем тайлы в Assets/Tiles под именами Grass, Water, Wall.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *