Unity 3D для разработки игр на Android-устройства | [Профессиональный мультиплатформенный игровой движок]



Реп: (59)

Прошлые версии


Unity3D — это мультиплатформенный инструмент для разработки двух- и трёхмерных приложений и игр, работающий под операционными системами Windows и OS X. Созданные с помощью Unity приложения работают под операционными системами Windows, OS X, Linux, Android, Apple iOS, Windows Phone, BlackBerry, а также на игровых приставках Wii, PlayStation 3 и Xbox 360. Есть возможность создавать интернет-приложения с помощью специального подключаемого модуля к браузеру Unity, а также с помощью экспериментальной реализации в рамках модуля Adobe Flash Player. Позже от поддержки Flash отказались. Приложения, созданные с помощью Unity, поддерживают DirectX и OpenGL.

Список поддерживаемых платформ:
  • Android
  • WP8
  • iOS
  • BlackBerry 10
  • Tizen
  • Wii U
  • OculisRift
  • GearVR
  • XBox 360/ XBox One
  • PS3/PS4/PSVita
  • Windows/Windows Store App
  • Linux/SteamOS
  • Mac
  • WebPlayer
  • WebGL
  • AndroidTV
  • Samsung SmartTV

С чего начать разработку под мобильные платформы:

Исходники:

Сайты:

Видеоуроки:

Текстовые уроки:

Плагины:

F.A.Q. (будет дополняться)
В.: У меня отсутствует часть сообщений в консоли, хотя они точно должны там быть.
О.: Выключите опцию Collapse в консоли.

В.: Как мне реализовать паузу?
О.: Наиболее простой вариант — установить Time.timeScale в ноль.

В.: Как заставить два меш-коллайдера взаимодействовать?
О.: Включить опцию Convex у обоих.

В.: Как отключить/заблокировать курсор?
О.: Screen.showCursor; Screen.lockCursor.

В.:Как придать телу импульс?
О.: Rigidbody.AddForce с параметром ForceMode.Impulse. 

В.: Как изменить громкость всех источников звука в сцене?
О.: AudioListener.volume

В.: Как избавиться от смазывания текстур при отдалении от них камеры?
О.: Отключить генерацию mipmaps в настройках импорта текстуры. 

В.: Как отключить вывод предупреждений в консоль?
О.: #pragma warning disable (в справке msdn даны подробности)

В.: Как спозиционировать Scene View на выбранном объекте?
О.: Edit > Frame Selected или просто клавиша F.

В.: Как сделать объект невидимым для Raycast?
О.: Поставить его в стандартный слой Ignore Raycast. 

В.: Как сделать так, чтобы игра была в горизонтальном а не в вертикальном режиме?
О.: В Player Settings нужно выбрать пункт Landscape left в Screen оrientation.

В.: Как отключить обработку коллизий для коллайдера?
О.: Включить опцию коллайдера isTrigger. Однако, такой коллайдер всё ещё будет принимать Raycast. 

В.: Куда сохраняются логи редактора?
О.: C:\Documents and Settings\zaicheg\Local Settings\Application Data\Unity\Editor\Editor.log
Этот же документ можно посмотреть, нажав Open Editor Log в консоли.

В.: Куда сохраняются логи приложения?
О.: Для standalone: _Data\output_log.txt. Для web: C:\Documents and Settings\user\Local Settings\Temp\UnityWebPlayer\log

В.: Где можно посмотреть, какие ресурсы сколько занимают в моём билде?
О.: Там же, в Editor.log (после сборки билда). 

В.: У меня глючит физика.
О.: Проверьте, осущетвляются ли все физические действия в FixedUpdate(). Увеличьте размеры объектов. Избавьтесь от тонких (или безтолщинных) мешей (Plane). Уменьшите FixedTimesetp. НЕ ДВИГАЙТЕ СТАТИЧЕСКИЕ КОЛЛАЙДЕРЫ (начиная с Unity5 уже можно, но всеравно не стоит)

B.: Не получается отредактировать элемент массива mesh.vertices (mesh.normals и прочее).
О.: Редактируйте во временном массиве vertTemp, а потом mesh.vertices = vertTemp.

В.: Я отключил скрипт, но он всё равно частично работает!
О.: Отключение скрипта действует лишь на вызов метода Update(). Start, Awake и прочие будут работать. 

В.: Как увеличить частоту физических расчётов?
О.: Edit > Project Settings > Time > Fixed Timestep

В.: Как приостановить выполнение в Editor Mode (поставить на паузу)?
О.: Debug.Break

В.: Как отобразить кириллицу в GUI?
О.: Локализация в коде это плохо. Нужно хранить текст в текстовых файлах и через код вытаскивать нужные строчки. Например, так (не самый лучший пример, но суть понятна)

В.: Как мне подгружать дополнительные ресурсы в рантайм?
О.: AssetBundles.

В.: Как менять хоткеи редактора?
О.: HKEY_CURRENT_USER\Software\Unity Technologies\Unity Editor

В.: Как разрешить игре работу "в фоне"?
О.: Edit → Project Settings → Player → Run in Background

В.: Почему не работает динамичный батчинг?
О.: В Unity есть лимит на количество вертексных атрибутов в 900 штук (лимит поставлен юнитеками опытным путем, может быть изменен в будущем, самому поменять его нельзя), именно вертексов, а не поликов. Т.е. смотрим на шейдер, которым хотим что-то отрисовать, на его входящие параметры. Видим, например, position, uv, normal - 3 атрибута. Делим 900 на 3, получаем лимит в 300 вертексов. Вот если модели с материалом на данном шейдере будут не более 300 вертексов - они будут сбатчены. Т.е. если отказаться от normal в шейдере, то получим position, uv - 900 / 2 = лимит в 450 вертексов. Если откажемся от uv (можно посчитать в том же вершинном шейдере для статичной геометрии, но это уже специфичные вещи), то получим 900 / 1 = лимит в 900 вертексов. От position отказаться нельзя, это координаты самого вертекса. Аналогично, если передавать position, uv, uv2, normal, tangent, color, то получим 900 / 6 = лимит в 150 вертексов.

В.: Почему возникают баги с обработкой столкновений коллизии?
О.: Это не баги, это непонимание того, как работает физика в юнити, уже было неоднократно объяснено. Коллайдеры без RB двигать нельзя, двигать нельзя, двигать нельзя - они считаются статичным миром, который двигаться не может и внутри расчитывается с оптимизацией по кластерам. Как только статичный коллайдер двигается - весь статичный мир перестраивается. Объекты с RB считаются отдельно как динамические объекты. Собственно, отсюда и "баг" - т.к. статичный мир не может двигаться, то и события наступать не могут при его принудительном движении.
P.S. Судя по профайлеру тот же CharacterController является статик-коллайдером со всеми вытекающими последствиями.
P.P.S. После выхода Unity 5 стало можно, но всеравно не тоит...

В.: Почему не работает Asset store? Как заставить работать?
О.: Попробуйте выключить режим использования DirectX 11

В.: Сколько стоит Unity?
О.: https://store.unity3d.com/shop/

В.: Какие отличия между Pro-версией и обычной?
О.: Заходим на страницу покупки Unity и на нужной лицензии выбираем Read more. После этого появится окошко, в котором можно посмотреть отличия между лицензиями.

В.: Где можно взять исходный код Unity?
О.: Нажмите здесь, выберете Россию, потом свяжитесь с представителями Unity Technologies. Разумеется это не бесплатно
Оригинальный текст с сайта Unity:
"If you want to license Unity to develop content for consoles and/or for embedding, cloud distribution or to access Unity source code, contact us here."


Правила поведения в теме:
  • Прежде чем задать вопрос, обязательно читайте F.A.Q. и пользуйтесь поиском по теме, возможно на ваш вопрос уже есть ответ!
    Кнопка поиск находится в правом верхнем углу.
  • Сообщения, не относящиеся к теме и вопросы, ответы на которые есть в F.A.Q. будут удаляться!!!
  • Обсуждение пиратских версий Unity или просьбы выложить пиратский контент, а так же сообщения, содержащие пиратский контент будут удаляться, а авторы по возможности будут караться!!!


В теме нет куратора. По вопросам наполнения шапки обращайтесь к модераторам раздела через кнопку "Жалоба" под сообщениями, на которые необходимо добавить ссылки.
Если в теме есть пользователь, желающий стать Куратором и соответствующий Требованиям для кандидатов, он может подать заявку в теме Хочу стать Куратором (предварительно изучив шапку темы и все материалы для кураторов).


Сообщение отредактировал derak1129 - 07.10.20, 10:38
Причина редактирования: Версия Unity 2020.1.7



Реп: (104)
mastersmit @ 27.11.2015, 01:34 *
Что если стены - это один большой объект, а пол это другой большой объект. К первому касаемся - издаем звук)

Даже если так, то есть же смежные стены) ударяемся об одну, катимся вдоль неё, закатываемся в угол и ударяемся о другую стенку (далее по моему коду проверяем нормаль, если такой стенки нет в "памяти" издаем звук). Но это всё даёт много расчетов и опять же проблема в "выпуклых" углах, короче сделал так:
Прикрепленное изображение



Реп: (1)
У меня есть два скрипта:

Первый скрипт VragScript

using UnityEngine;
using System.Collections;

public class VragScript : MonoBehaviour {

void Update () {
transform.position =
Vector3.MoveTowards(transform.position, new Vector3(2, 1, 3), 0.01f);
}
}


Второй скрипт

using UnityEngine;
using System.Collections;

public class IgrokScript : MonoBehaviour {
public float igrokX, igrokY, igrokZ;

void Update () {
igrokX = transform.position.x;
igrokY = transform.position.y;
igrokZ = transform.position.z;
}
}


Суть в чем враг компонент Shape медленно движется на Cube пока в него невойдет.
Но как передать переменные где сейчас находится кубик он же ведь у меня движется!

Вот так неработает! Он невидит переменных игрока!
Vector3.MoveTowards(transform.position, new Vector3(igrokX, igrokY, igrokZ), 0.01f);



Реп: (104)
* NIKOLAYY2,
Во-первых, "не" с глаголами пишется раздельно) и не говори, что это к делу не относится ибо это причиняет боль глазам помогающего тебе человека)
Во-вторых, чтобы обратиться к переменным другого скрипта ты должен обратиться к тому объекту, потом к скрипту и уже там только брать переменные. Ну,примерно так :

public GameObject Cube; // это твой игрок кубик, через инспектор закинешь

void Update (){
transform.position = Vector3.MoveTowards(transform.position, new Vector3(Cube.getComponent<IgrokScript >.igrokX, Cube.getComponent<IgrokScript >.igrokY, Cube.getComponent<IgrokScript >.igrokZ), 0.01f);
}

Это что касалось обращения к переменным.
НО! Так в данном случае это говнокод, зачем тебе лишние переменные заводить, если можно сразу обратиться к позиции игрока? Так что получится что-то типа

public GameObject Cube; // это твой игрок кубик, через инспектор закинешь

void Update (){
transform.position = Vector3.MoveTowards(transform.position, Cube.transform.position, 0.01f);
}


Сообщение отредактировал Артегор - 28.11.15, 00:09



Реп: (1)
* Артегор,
Спс конечно сделал по вашему но так даже компилироваться перестало...

И я думаю оно даже переменных вобще не перадает теперь.
Два кубика я добавил на сцену.


Да и чуть незабыл, я скрипты на кубики повесил, на 1 кубик 1 скрипт на 2 второй.

Прикрепленные изображения
Прикрепленное изображение
Прикрепленное изображение


Сообщение отредактировал NIKOLAYY2 - 27.11.15, 23:58



Реп: (104)
* NIKOLAYY2,
лол.
ты невнимателен )Первый код и второй (которые я написал) делают одно и тоже, только второй оптимизирован. Ладно... На игроке вообще не нужен этот скрипт. А на том что на враге висит уже пишешь

void Update (){
transform.position = Vector3.MoveTowards(transform.position, Cube.transform.position, 0.01f);
}


где Cube это твой игрок. Ты в инспекторе туда закинешь куб соответствующий игроку.
И вообще это все есть в документации, даже с примерами и объяснениями

Сообщение отредактировал Артегор - 28.11.15, 00:10



Реп: (1)
* Артегор,
А есть в сборе полностью код с первой строки? И как назвать скрипт, а то у меня не работает.
По документам я и собирал но не сработало...



Реп: (104)
* NIKOLAYY2,
что не работает, какие ошибки ?



Реп: (1)
* Артегор,
Неработает вобще ничего, раньше хоть в точку перемещался в заданную.

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

Я даже не вижу там переменных.

Или у вас неполучается или получается да вы скрываете нужную часть кода.
Вобщем код неработает в таков виде.

Вы даже не объявили там переменных!
А уже описали их в коде! Как он будет работать?
Я в Юнити 3 дня всего можно было и полностью код показать чтобы разобраться как он работает и дальше двигаться, а так на одном месте все...

Прикрепленные изображения
Прикрепленное изображение


Сообщение отредактировал NIKOLAYY2 - 28.11.15, 00:59



Реп: (104)
NIKOLAYY2 @ 28.11.2015, 00:50 *
Неполучается из одного скрипта в другой переменные передать!

я уже устал тебе объяснять что это не нужно! Зачем тебе переменные с позицией игрока передавать если ты сразу можешь взять позицию ?!



Реп: (1)
* Артегор,
Я уже написал этот код:

using UnityEngine;
using System.Collections;

public class MyScript : MonoBehaviour {
public GameObject Cube;

void Update () {
transform.position = Vector3.MoveTowards(transform.position, Cube.transform.position, 0.01f);
}
}


Я кидал его и на один кубик и на второй и на 2 вместе компилируется но ничего даже незадвигалось, они стоят на месте!



Реп: (1)
Один кубик должен двигаться за другим, один кубик враг, другой кубик игрок он нацеплен на камеру и двигается вместе с ней. Он должен догонять как бы камеру (игрока).

Сообщение отредактировал NIKOLAYY2 - 28.11.15, 01:19



Реп: (104)
* NIKOLAYY2,
специально проверил, все отлично работает. Ещё раз спрошу ты в инспекторе назначил это Cube ? Не просто на один повесил скрипт,а ещё второй закинуть нужно

Сообщение отредактировал Артегор - 28.11.15, 01:36



Реп: (1)
* Артегор,
Это вот вот сюда надо было что ли?
Не я просто скрипт кидал на кубик больше не делая ничего думал ненадо больше ничего..

Сейчас да работает, как надо заработало, спасибо большое! :)

Прикрепленные изображения
Прикрепленное изображение


Сообщение отредактировал NIKOLAYY2 - 28.11.15, 02:09



Реп: (348)
* NIKOLAYY2,
В программировании важна логика. Подключайте и такие простые вещи начнут как семечки отщелкиваться, даже с таким маленьким скажем)
И ещё, в консоли тебе пишутся ошибки, в большинстве случаев по ним можно определить виновника, как в данном последнем случае..



Реп: (0)
Не делается save по нажатию на клавишу "k" английскую.

private var PlayerX : float;
private var PlayerY : float;
private var PlayerZ : float;

var player : GameObject;
var PlayerPosition : Transform;

var saved = 0;

function Start() { loadstuff(); }

function Update ()
{

PlayerX = (PlayerPosition.transform.position.x);
PlayerY = (PlayerPosition.transform.position.y);
PlayerZ = (PlayerPosition.transform.position.z);
if(Input.GetKeyUp("k")&& saved == 0)
{
saved = 1;
savestuff();
}

}

function savestuff()
{
PlayerPrefs.SetFloat("PlayerX",PlayerPosition.transform.position.x);
PlayerPrefs.SetFloat("PlayerY",PlayerPosition.transform.position.y);
PlayerPrefs.SetFloat("PlayerZ",PlayerPosition.transform.position.z);

}

function loadstuff()
{
saved = 0;
PlayerPosition.transform.position.x = (PlayerPrefs.GetFloat("PlayerX"));
PlayerPosition.transform.position.y = (PlayerPrefs.GetFloat("PlayerY"));
PlayerPosition.transform.position.z = (PlayerPrefs.GetFloat("PlayerZ"));
}


ЯваСкрипт.
Помогите кто может

Сообщение отредактировал super.andruha132 - 28.11.15, 11:52
Причина редактирования: Добавил спойлер с кодом



Реп: (104)
* super.andruha132,
попробуй
(Input.GetKeyUp(KeyCode.k))


Сообщение отредактировал Артегор - 28.11.15, 14:10



Реп: (0)
Артегор, нет не вышло. Персонаж появляется фиг знает где, то есть далеко от мира.



Реп: (104)
* super.andruha132,
я, помнится, когда начинал,то тоже писал на js и у тогда тоже были какие-то проблемы с PlayerPrefs. Мой тебе совет переходи на c#. Щас попробовал и все работает



Реп: (0)
Артегор, а скрипт сохранения на C# по нажатию на клавишу k (английскую) и по заходу в так называемый чекпоинт не дашь?



Реп: (0)
Кто нибудь дайте скрип на c# сохранения по нажатию на кнопку k английскую и при входе в так называемый чекпоинт. Я писал скрипты только на ЯваСкрипт.


Полная версия   Текстовая версия

Помощь   Правила

Сейчас: 29.03.24, 04:01