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



Реп: (13)
Ребят подскажите а как вот сюда прикрутить
if(distance < 0.7) {
EnemyHealth eh = (EnemyHealth)target.GetComponent("EnemyHealth");
eh.AdjustCurrentHealth(-10);
}
еще и условие что при дистанции меньше 0.7 и при анимации атака происходит отнимание жизни.

и еще вопрос как вот тут сделать using UnityEngine;
using UnityEngine;
using System.Collections;

public class Player_control : MonoBehaviour {

//остановка времени Time.timeScale =0;

public Animator anim;
private Rigidbody2D _myRigidbody;
public int Way = 0;
public float playerSpeed = 5.0f;
public float Jump = 5.0f;
private bool canJump;
public Transform StartPos;
public Transform EndPos;
public LayerMask groundlayer;

void Start(){
_myRigidbody = this.rigidbody2D;
anim = GetComponent<Animator>();
}

void Update () {
if(Input.GetKey(KeyCode.D)){
transform.Translate(Vector2.right * playerSpeed * Time.deltaTime);
Debug.Log ("Way Right"); //Print out in the Unity console which character was selected.
Way = 1;
PlayerPrefs.SetInt("Way", (Way));
}

if(Input.GetKey(KeyCode.A)){
transform.Translate(-Vector2.right * playerSpeed * Time.deltaTime);
Debug.Log ("Way Left"); //Print out in the Unity console which character was selected.
Way = 2;
PlayerPrefs.SetInt("Way", (Way));
}

if (Input.GetKey (KeyCode.H)){

anim.SetBool ("BlockLeft", true);
anim.SetBool ("BlockRight", true);
}

else {
anim.SetBool ("BlockLeft", false);
anim.SetBool ("BlockRight", false);
}
//Jump проверка
RaycastHit2D hitInfo= Physics2D.Linecast(StartPos.position, EndPos.position, groundlayer.value);

if (hitInfo.collider != null) {
//Debug.Log("HIT");
anim.SetBool ("JumpRight", false);
anim.SetBool ("JumpLeft", false);
canJump = true;
}

// Jump
if(Input.GetKeyDown(KeyCode.Y) && canJump == true){
anim.SetBool ("JumpRight", true);
anim.SetBool ("JumpLeft", true);
_myRigidbody.velocity = new Vector2(_myRigidbody.velocity.x, Jump);
Debug.Log ("Jump"); //Print out in the Unity console which character was selected.
canJump = false;

}

//Attack

if (Way == 1) {
anim.SetBool ("AtackLeft", false);
anim.SetBool ("BlockLeft", false);
}
if (Way == 2) {
anim.SetBool ("AtackRight", false);
anim.SetBool ("BlockRight", false);
}
}
}
При нажатии на кнопку H игрок становиться в блок, но держа кнопку H и например кнопку влево игрок в блоке перемещается влево а как сделать чтобы он при нажатой кнопке H не перемещался а только поворачивался? а отпустив кнопку H он двигался нормально?



Реп: (-1)
народ подскажите, делаю спрайтовый взрыв. Прикрепленное изображение

в инспекторе устанавливаю Animation type = 1. когда игрок приближается она не воспроизводиться. в чем может быть дело



Реп: (503)
* boned11,
так ты через скрипт аниму запускать не забывай)



Реп: (-1)
с анимацией разобрался. теперь такая проблема. короче, создал бомбу с триггером, игрок проходит, бомба взрывается и уничтожается через Destroy(gameobject, 2). в консоле появляется эта ошибка. как исправить подскажите
Прикрепленное изображение



Реп: (104)
* boned11,
"вы удалили объект , но продолжаете получать доступ к нему"

Короче скрипты проверь, удаляешь объект , на который где-то ссылаешься



Реп: (-1)
бомба - префаб. игрок движется прямо и на его пути возникают префабы бомб. если он их касается они взрываются. после взрыва появляется эта ошибка. критично ли это и подскажите плиз где ошибка. вот скрипт на префабе бомбы
using UnityEngine;
using System.Collections;

public class anim : MonoBehaviour {

private Animator animat;

void Start ()
{
animat = GetComponent<Animator>();
}

// Update is called once per frame
void FixedUpdate ()
{



}

void Update()
{


}

void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
animat.SetBool("isPlayer", true);
Destroy(gameObject, 1);
}
}



Реп: (212)
Не могу понять, как сделать, чтобы LookAt следил за private объектом?

private Transform Player;
private float x,y,z;

void Start()
{
как правильно инициализировать Player? поиск через тэг не помогает...
}

void LateUpdate()
{
transform.LookAt(Player);
transform.Rotate (0,272,-100);
}
}


сделал так:
private Transform Player;
private GameObject player;
private float x,y,z;

void Start()
{
GameObject player = GameObject.FindGameObjectWithTag ("Player");
Player = player.transform.Find ("casual23_m_mediumpoly");
}

void LateUpdate()
{
transform.LookAt(Player);
transform.Rotate (0,272,-100);
}
}


Сообщение отредактировал seneka12345 - 20.09.14, 22:13



Реп: (33)
всем привет. нужно из стринга удалить несколько последних букв. каким образом можно это сделать?
пробовал myString.remove, но не получилось
numbers = (int)Mathf.Log10(nowFrame)+1;
Debug.LogWarning ("nums:"+numbers);

nowFrame++;
Debug.LogWarning (Name.Length);
Name.Remove (Name.Length-numbers);
Debug.LogWarning (Name.Length);
fn=nowFrame.ToString();
Name=Name+fn;

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


есть ли другие способы? или что тут я делаю не так?

Сообщение отредактировал gul.jenya - 20.09.14, 23:51



Реп: (503)
* seneka12345,
GameObject player = GameObject.FindGameObjectWithTag ("Player").transform;

ты просто точку с запятой рано поставил :rofl:



Реп: (207)
* gul.jenya,
http://msdn.microsoft.…ka44szs(v=vs.110).aspx

Модератору/куратору - предлагаю все вопросы по базовым конструкциям языка (c#, js) считать нежеланием гуглить и изучать вопрос самостоятельно хотя бы на минимальном уровне, т.е флудом.

Сообщение отредактировал Leopotam - 21.09.14, 00:57



Реп: (11)
Всем привет, имеется телефон на mtk6592 с граф.ускорителем mali 450, как исправить отображение текстур в пикселизации, думаю вы поняли о чём я? На powerVR 544 всё хорошо было :(



Реп: (212)
* Dimmi Borgir,
Попробуй снизить тайлинг в материалах.



Реп: (104)
* seneka12345,
сначала прочитал "Попробуй снизить троллинг в материалах."
:D



Реп: (0)
Подскажите, как можно реализовать смерть от падения с высоты, например >10?



Реп: (503)
* sireys7,
ну самое простое вот так:
void OnCollisionEnter (Collision other) {
if (rigidbody.velocity.y > 10) {
//отнимаем здоровье
}
}



Реп: (0)
Этот вариант мне знаком. Совсем не то, не учитывает скорость падения.



Реп: (104)
* sireys7,
velocity это и есть скорость.
прояви фантазию . Ну,грубо говоря


int damage; // урон от падения
damage = rigidbody.velocity.y ;

Сообщение отредактировал Артегор - 22.09.14, 13:07



Реп: (60)
Всем привет. Недавно начал интересоваться разработкой миниигр на юнити. Не могли бы помочь по некоторым вопросам?

1)Существуют ли аналоги character motor которые работают по методу rigidbody? т.е. чтобы гг мог двигать rb предметы и т.д.

2) Загрузил я модельку (жука, если важно), уменьшил до нужных мне размеров. Когда с ним работаю и редактирую его, то у меня довольно долго это происходит,(раз в 5 дольше чем компиляция всей сцены, включая жука) вопрос, в каком формате хранить/использовать 3д модели? был 3дс, я конвертнул в fbx, стало получше, но все равно долго.

3)Как сделать прилипание того же жука к стенам/потолкам? единственное что приходит на голову - изменение гравитации и приложение силы к жуку к поверхности, но оба они не подходят, гравитация - глобальная, а с силами думаю много мороки будет и дерганья всякие(нет?)

4) Может быть вы посоветуете какой-нибудь конструктор GUI? знаю про дефолтный, но может есть удобнее, пока не начинал делать GUI

5) О чем стоит сразу задуматься, если пока тестирую только на ПК, а потом портировать на андроид добавив управление?

6)Какой тип коллизий использовать? continous или нет, если например, хочу чтобы колесо не проникало вообще в падающую на нее стену?

Заранее спасибо :)

Сообщение отредактировал KSF000 - 22.09.14, 13:45



Реп: (104)
префабом полностью можно заменить модель? То есть грубо говоря есть модель города, распихал каждый дом в префаб и модель можно удалить?


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



Реп: (0)
Не то. У игрока нет здоровья, игрок это вообще машина и мне нужно, чтобы, например, при падении с высоты 5 метров колеса не отваливались, а с высоты 10 метров- отваливались.


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

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

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