Комментарии проекта Unity 3D
3

Создание обьектов вокруг обьекта

» Unity 3D
Как можно в Unity, определить точки вокруг объекта, по кругу? Хотелось создать астероидный пояс, астероиды на расстоянии 100 единиц, через каждые 20 градусов.
N7 Molot #1 - 6 дней назад 0
Talmagett:
нз
Talmagett #2 - 6 дней назад 0
Спасибо чувак, я объяснил неправильно, надо было чтобы появилось кольцо
Но благодаря тебе я понял
И нашел ответ
Все дело в син и кос они оказываются принимают радианы а не градусы, пришлось сначала их перевели
Все равно спасибо что ответил
N7 Molot #3 - 1 неделю назад (отредактировано ) 0
Если знаешь как работает sin/cos то будет просто, хватаем координаты и через цикл задаем сколько нужно объектов, для упрощения:

пример на спавн префаба

int count = 100; //кол-во
float rad = 20; //радиус

void Start () {
	for (int i = 0; i < count; i++) {
		GameObject newObj = Instantiate (prefab.gameObject);
		Vector3 newPos = transform.position;
	
		float step = (Math.PI * 2) / count; // отступ
		newPos.x = centerX + Math.sin (step * i) * rad; // по оси X
		newPos.z = centerZ + Math.cos (step * i ) * rad; // по оси Z
		newPos.y = 0; // по оси Y - тобиш высота
	
		newObj.transform.position = newPos;
	}
}
Можно попариться c аналогом, примерно так же через цикл, тупо зная отступ делаешь спавн
1

Срабатывание Тригерра у всех экземпляров префаба.

» Unity 3D
Добрый день, такая беда. У меня есть префаб противника, состоящий из нескольких частей. В одной из частей "пустышке" находится лист с теми игроками, которых противник заметил, заполняется он при соприкосновении коллайдера с этим игроком. Как только прикосновение окончилось - первый элемент из списка должен быть удален. НО(!) проблема в том, что скажем, у 5ти префабов противника одновременно срабатывает этот тригер при соприкосновении с игроком и все поля в классе внезапно оказываются общими, несмотря на мои попытки присвоить для каждого объекта свои собственные поля. Что я делаю не так? Ниже пример кода.

Читать далее...
N7 Molot #1 - 2 недели назад 0
я делал так что, каждый триггер был у каждого игрока и на нем висел этот лист. Получится так что у каждого имеется свой лист и свой триггер.
1

Магазин в 2д игре

» Unity 3D
Здравствуйте, хотел сделать магазин, но оказалось всё не так просто)
Подскажите пжалста с кодом.
Мне нужно, чтоб я покупал сцену которая менялась на 1 кнопке.
То есть в главном меню есть кнопка Play. Я захожу в магазин покупаю сцену2. На главном экране при нажатии на кнопку прогружалась сцена 2. Потом опять захожу в магазин покупаю сцену3 и при нажатии на кнопку Play прогружалась сцена3. ну и т.д.
N7 Molot #1 - 2 недели назад 0
С кодом навряд ли, но логически примерно будет так:
Делаешь пустой объект, типо менеджера сцен, делаешь его не уничтожаемым и при покупке, через подключение фиксируешь что куплено, и так при кнопке плей будет загружаться последняя купленная сцена, через функцию загрузки, где идекс будет браться из менеджера.
1

Коллайдер полностью не налегает на объект.

» Unity 3D
Здравствуйте, Дорогие!
Сделал полукруг в 3dmax, перенёс в Unity. Наложил Mesh Collider, а он полностью не обтягивает объект.
Что делать?
N7 Molot #1 - 2 недели назад 1
скрины можно?
Есть в меш коллайдере галочка "Convex" через неё я выравнивал свою полу сферу, там нужно будет с параметрами поиграться. Если не выйдет, попробуй Concave Collider, он конечно платный, но он стоит того.

или же, если полусфера ровная, как оригинальная, то повесь тупо сферколайдер, разницы не будет, если нижняя/верхняя часть не взаимодействует с другими, как примеру игровая зона
2

Анимация

» Unity 3D
Здравствуйте, Уважаемые!
Хочу спавнить платформы, которые движутся по трём векторам через анимацию . Да вот незадача, они спавняться на одном и том же месте (координаты в которых я записывал анимацию) . Как их спавнить в любых координатах?
Msey #1 - 3 недели назад 1
Вносить в родительский объект и передвигать его туда, куда тебе хочется.
XGM Bot #2 - 3 недели назад 1
Похожие вопросы:

» ответ
Tiodor, возможно. Но самый замечательный вариант это сгенерировать мэш с правильными текстурными координатами. И тогда ничего хитрого не надо придумывать. Поэтому надо курить генерацию мэша
» ответ
Разве это не показано в этом коде?
» ответ
Чтобы переместить костную анимацию в движок, сначала надо перепечь анимацию с рига на кости

2

Мобильная клавиатура

» Unity 3D
Мне бы хотелось сделать так,чтобы при нажатии кнопки вылазила клавиатура(мобильная) для игры на телефоне,но я не знаю как это сделать,искал в инете не нашел.
GeneralElConsul #1 - 2 месяца назад 2
При нажатии на Input элемент стандартного юнитековского UI вылезает клавиатура автоматически.
NazarPunk #2 - 2 месяца назад -1
искал в инете не нашел
В гугле искать пробовали?
1

WebGL аддон

» Unity 3D
Хотел бы до установить аддон для билда приложения в webGL без переустановки всего эдитора.
5

Кто как написал "глаза" для ИИ?

» Unity 3D
Я использовал функцию "вход в коллайдер", но она не оптимальная, если будет много объектов в зоне коллайдера. Читал на форумах что можно через "рендер", если он отрендерился, то его кто то видит, но это опять не лучший выход. Думаю сделать "райкастами", это самый надежный выход, но пока не в курсе - сильно ли нагрузит проц, если допустим будет 12 ИИ и от каждого будет кидаться примерно 49 лучей каждый "фиксапдейт".
N7 Molot #1 - 4 месяца назад (отредактировано ) 0
Вот что я вспомнил, можно настроить правила физики, к примеру что бы игроки не сталкивались друг с другом.
Для обзора ИИ, как у меня сделано через коллайдер, через функцию "входа в триггер" можно выставить флаги в настройках физики что с чем будет реагировать. И таким образом, если выставить реакцию что "обзор коллайдер" реагирует с игроками, то все остальное не будет вызывать метод, и таким образом оптимизируется процесс нахождения целей. Ну а после, что я уже давно написал, "райкастить" цель, есть что то на пути между ИИ и игроком, если нет, то ИИ его видит. Так же можно и со звуком сделать.
статью что ли написать
прикреплены файлы
alexprey #2 - 4 месяца назад (отредактировано ) 0
N7 Molot, делаю rts в юньке, у каждой пушки корабля свой контроллер атаки, который делает SphereCast, находит нужные цели, а затем считает углы и проверки всякие. Делаю это не в FixedUpdate, потому что это очень часто, и сильно просаживает проц, пересел на корутины с ожиданием в 0,25-0,3 сек. В итоге баталии 300х300 проходят норм с кораблями у которых по 2 пушки
прикреплены файлы
N7 Molot #3 - 4 месяца назад (отредактировано ) 0
Msey:
это понятно, боюсь что сильная нагрузка будет идти. Я кое что ещё вспомнил, завтра поставлю эксперимент. Если не получиться, то придется обойтись райкастами, даже убрать коллайдер, так как можно просто выставить направление и длину луча.
Msey #4 - 4 месяца назад (отредактировано ) 2
Вносишь попавшие в окружность или сферу возможные видимые объекты (с флагом canBeNoticed)
Physics2D
Physics
И рейкастишь между крайними вершинами
если рейкастится с этим объектом, то объект видим
прикреплены файлы
N7 Molot #5 - 4 месяца назад 0
Думал ещё сделать через камеру, но не нашел метод, который сработает, в случае входа в поле зрения объекта.
3

Не могу зделать задержку между прыжками помогите пожалуйсто

» Unity 3D
Вот код
""
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

Читать далее...
N7 Molot #1 - 5 месяцев назад 0
ma19ks:
не работает
Что именно? Как делал?
ma19ks #2 - 5 месяцев назад 0
N7 Molot:
закинь булевую переменную как с передвижением, а если нормально сделана анимация, можно через ивент выловить конец прыжка, так же можно райкаст вниз кинуть, так тоже можно отловить возможность использовать прыжок
не работает
N7 Molot #3 - 5 месяцев назад 0
закинь булевую переменную как с передвижением, а если нормально сделана анимация, можно через ивент выловить конец прыжка, так же можно райкаст вниз кинуть, так тоже можно отловить возможность использовать прыжок
1

Editor overhead 80-90%

» Unity 3D
СPU Usage именно other почти всё место занимает по графику. Когда кидаю на андроид её игра лагает, примерно 10 фпс. Даже при создании нового проекта. Абсолютно без ничего, тоже самое пишет, уже облазил все англоязычные форумы, ничего не помогает. Так же удалял полностью Юнити и установил последнюю версию, проблема осталась... Буквально вчера всё было нормально, потом продолжал заниматься игрой, перекидываю на телефон и всё лагает... И реклама на телефоне перестала показываться.
Proxy #1 - 6 месяцев назад 0
Ответ нашел. Нужно создавать новый проект и перекидывать туда всё что есть у вас с проекта где проблема. Всё.
13

Сериализация объектов в C#

» Unity 3D
В этой статье будет подробно разобрана сериализация/десериализация объектов, ее предназначение, форматы и случаи, где какой формат сериализации использовать.

Читать далее...
prog #9 - 7 месяцев назад 0
Alex_Hell,
Не знаю как у вас в шарпах, а на джаве я пользовался встроенной в среду разработки возможностью выполнять перед компиляцией проекта код, получающий информацию об аннотациях в коде проекта - кастомный сериализатор-десериализатор с генерацией кода писался очень быстро на основе этого.
Doc #10 - 7 месяцев назад 2
Намеки на то, сколько времени занимает подобное дело - оверэстимейшн. Написание текстовой сериализации для объекта занимает минуты.
Alex_Hell #11 - 7 месяцев назад (отредактировано ) 0
Вы понимаете, как работает ваша сериализация. И если будете ловить какие-то баги, то понимаете, как ее исправить, чего не скажешь о какой-то либе, начинку который вы не знаете
только в готовых решениях багов как правило почти нет, или очень редкие, и при желании можно выбрать либу-конкурентов без этих багов если их править не будут.. а свой велосипед надо самому поддерживать. в том числе и баги фиксить, и функционал добавлять - всякие подтипы полиморфные в списке (как Doc указывал, а я сказал что они уже реализованы) много чего еще из-коробки есть
  1. производительность там где нужна - можно юзать protobuf или иже с ними бинарные.. текстовая десериализация в/из json не будет самописная быстрее чем готовые либы json, за счет чего? рефлексию если убрать даже - есть генераторы кода, которые без рефлексии компилят, и при этом будет чуть быстрей, но руками такое городить - долго, я имею ввиду свой генератор кода, где будет вида
output.writeTag("health", health);
output.writeHierarchyOfObject("target", target); где target спец подтип, и в него тоже вручную сериалайзить
так вот руками написанное такое всмысле без генератора - будет с рефлекскией - и медленно, а без рефлексии нужен свой велосипед - жесть будет
.. про генератор я имел ввиду что по CLASS декларации само сгенерит код того вида выше с writeTag которые руками не надо писать - и будет быстрее чем любой самописный елосипед, просто это доп требование - если надо - найдете сериалайзер даже json такой
\ protobuf - уже юзает такие же генераторы, без рефлексии
GeneralElConsul #12 - 7 месяцев назад (отредактировано ) 0
Перечитал комментарии. На данный момент мое дилетантское мнение таково, что json дает хорошую читаемость в простейших случаях + всякие библиотеки, чтоб не писать самому. Во всех остальных случаях, думается, своя сериализация будет лучшим решением, потому что:
  1. Вы понимаете, как работает ваша сериализация. И если будете ловить какие-то баги, то понимаете, как ее исправить, чего не скажешь о какой-то либе, начинку который вы не знаете.
  2. По производительности как конечное решение своя кастомная сериализация всегда лучше.
Alex_Hell #13 - 7 месяцев назад 0
Не мог пройти мимо, не ответив на заблуждения вышеотписавшихся.
  1. сериализация вручную пилится в редких случаях, я за свои 14 лет опыта программирования пришел в выводу что юзать готовые решения - лучше, в 1ю очередь изза их сторонней поддержки и правки багов, плюс функицонала больше чем вы сами навелосипедите
  2. основная задача при сериализации с любыми решениями хоть готовыми хоть вашими - описать данные, пишите C# классы, и когда структуры классов и иераррхии вложенности усложняются - как раз выгоднее писать нормальные C# классы и отдать на откуп системе их перевод в текст JSON/XML или даж бинарный, а не самому писать как каждый подтип будет преобразовываться
  3. нет проблем сохранять полиморфные объекты в JSON, юзайте JsonDotNet с опцией чтобы писало $type при сериализации и соответсвенно нужный подкласс инстанциируется при десериализации
  4. при текстовом формате сериализации, что JSON что XML, не столь важен выбор, когда речь о читаемости итоговых сериализованных файлов - это редкое действие, к тому же открываете в текст редакторе, и при сериализации включаете PrettyPrint чтобы на 1 строке был 1 атрибут, а не все в 1 строку
4

Постепенное увеличение скорости спавна объекта

» Unity 3D
Здравствуйте, уже не знаю что делать. Дело в том что мне нужно постепенно уменьшить цикл спавна.
» code
public class SpawnBombs : MonoBehaviour {

    public GameObject Bomb;

    void Start()
    {
        StartCoroutine(Spawn ());
    }

    IEnumerator Spawn ()
    {
        while (!tower1.lose)
        { 
            Instantiate (Bomb, new Vector2 (Random.Range (-2.5f, 2.5f), 5.9f), Quaternion.identity);
            yield return new WaitForSeconds (1f);
        }
    }
}
На данный момент "бомбы" спавнятся каждую секунду, хотелось бы чтоб они спавнились постепенно быстрее. Типа сейчас 1 секунда, через 10 секунд уже 0.8 и т.д., за ранее благодарю
Proxy #1 - 8 месяцев назад 0
GeneralElConsul:
Если ты не понимаешь как это сделать, то тебе лучше сначала научится C# по-нормальному, книгу какую-нибудь прочитай что ли, там часто примеров много.
Я прям счастлив, я изучаю, но пока только на самом начале) Спасибо большое, учту ваш совет)
GeneralElConsul #2 - 8 месяцев назад (отредактировано ) 0
Если ты не понимаешь как это сделать, то тебе лучше сначала научится C# по-нормальному, книгу какую-нибудь прочитай что ли, там часто примеров много.
public class SpawnBombs : MonoBehaviour {
	...
	float timer = 1.2f;
	...
	IEnumerator Spawn ()
	{
		...
		timer -= 0.2f;
		yield return new WaitForSeconds (timer);
	}
}
Proxy #3 - 8 месяцев назад 0
JMCode:
делаеш цикл и время если время 1 сек прошло то выполняем иначе след цикл пока это время находит то уменшаем 1 сек на 0.50 и так далее -0.1 до 0 и закончим цикл вот и суть
Ничего не понял, можно приблизительный код, если не сложно)
JMCode #4 - 8 месяцев назад 0
делаеш цикл и время если время 1 сек прошло то выполняем иначе след цикл пока это время находит то уменшаем 1 сек на 0.50 и так далее -0.1 до 0 и закончим цикл вот и суть
2

Бесконечный прыжок)

» Unity 3D
Хочу отключить способности супер-мэна ^-^ Перс прыгает вечно!!!
вот код скажите чё делать?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Controller : MonoBehaviour {

	public float VertImp;
    Rigidbody2D rb;
	bool isGrounded;

	void Start () {
		rb = GetComponent<Rigidbody2D> ();
	}

	public void OnClickJump ()
	{
			rb.AddForce (new Vector2 (0, VertImp), ForceMode2D.Impulse);
	}

}
N7 Molot #1 - 11 месяцев назад 0
Блочишь прыжок, или булевой или проверкой (касается ли перс чего то)
 void OnCollisionEnter()
    {
        Jumping = false;
    }
А перс отпускается обратно?
5

Прыжок

» Unity 3D
Привет, мне нужно сделать прыжок в игре так что бы при нажатии на экран андроида он подпрыгивал. Физику я уже сделал. Все пишут код по разному, каждый по своему и многое не работает! У меня Unity 5 (32 битная), c# скрипт и MonoDevelor. А персонажа зовут person
ledoed #1 - 11 месяцев назад (отредактировано ) 1
ту конструкцию что я скинул должна быть в update и переменная grounted должна быть реализована тобой
tsiganock #2 - 11 месяцев назад (отредактировано ) 0
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class playerController : MonoBehaviour {

	public float VertImp;
	Rigidbody2D rb;

	if (grounted)
	{
		rb.AddForce(Vector2.up * strenght);
	}

	void Start () {
		rb = GetComponent<Rigidbody2D> ();
	}

	void FixedUpdate () {
		if (Input.tochCount > 0) {
			rb.AddForce (new Vector2 (0, VertImp), ForceMode2D.Impulse);
			foreach(Touch t in Input.touches)
		}
	}
}
мой код стал выглядеть вот так, а ошибки, тут и говорить нечего.
**Assets/script/playerController.cs(10,3): error CS1519: Unexpected symbol `if' in class, struct, or interface member declaration
Assets/script/playerController.cs(10,14): error CS1519: Unexpected symbol `)' in class, struct, or interface member declaration**
error CS9010: Primary constructor body is not allowed
Assets/script/playerController.cs(23,2): error CS1525: Unexpected symbol `}'
ledoed #3 - 11 месяцев назад (отредактировано ) 1
нуна примерно такую конструкцию
        if (Input.touchCount > 0)
        {

            foreach(Touch t in Input.touches)
            {

                if (grounted)
                {
                    rb.AddForce(Vector2.up * strenght);
                }

            }


        }
grounted -это булевая переменая отвечающая перс твой косаеться вообще земли
strenght - это сила с которой твой чел полетит в адфосе изначально импульс
tsiganock #4 - 11 месяцев назад (отредактировано ) 0
ledoed:
ООО спасибо! Это точно!
ledoed:
Зделал всё по инструкции с интернета + твои советы, исправил все ошибки, но выдало последнюю ошибку The type or namespace name `RigitBody2D' could not be found. Are you missing an assembly reference? Не знаю как исправить! если хочешь вот код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class playerController : MonoBehaviour {

	public float VertImp;
	RigidBody2D rb;

	void Start () {
		rb = GetComponent<RigitBody2D> ();
	}

	void Update () {
		if (Input.toches ()) {
			RigitBody.AddForce (new Vector2 (0, VertImp), ForceMode2D.impulse);
		}
	}
}
ledoed:
Я кароч немного исправил, но ошибка тут!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class playerController : MonoBehaviour {

	public float VertImp;
	RigidBody2D rb;

	void Start () {
		rb = GetComponent<RigidBody2D> ();
	}

	void FixedUpdate () {
		if (Input.toches ()) {
			rb.AddForce (new Vector2 (0, VertImp), ForceMode2D.impulse);
		}
	}
}
ledoed #5 - 11 месяцев назад 1
отлавливаешь нажатие тача Input.touches,или кнопой UI там предельно просто,ты говоришь физику сделал значит отправить импульс вверх те не составит труда (rigitbody.AddForce())
8

Звук в игре создаётся пачками

» Unity 3D
есть скрипт для озвучки
 public void PlaySound(int y_soundNum)
    {
        GameObject y_gameObject = Instantiate(y_sfx, Vector3.zero, Quaternion.identity) as GameObject;
        AudioSource y_audioSource = y_gameObject.GetComponent<AudioSource>();
        y_audioSource.clip = y_audioClips[y_soundNum];
        y_audioSource.Play();
        Destroy(y_gameObject, y_audioClips[y_soundNum].length);
    }
но при создании звука он создает сразу пачку объектов. как можно сделать так чтобы звуковой объект создавался только 1? нажатии кнопки, ходьбе, атаке???
Tevirp #1 - 1 год назад (отредактировано ) -2
Что то все равно не получается(
ledoed #2 - 1 год назад 0
а на оф юньке там что нет уроков или материалов как управлять звуком
Tevirp #3 - 1 год назад -2
Делал таким образом компанией звука на персонажа при ходьбе, но весь интерес в том что у меня сделан джойстик для движения.
И сделать условия на передвижения звук все равно проигрывается 1 за другим даже не успев начаться
Ledoe подскажи пожалуйста сайт где можно норм озвучку сделать, ато чувствую моим макаром я каши много не сварю)))
ledoed #4 - 1 год назад 0
ну смари есть юнит на него навесил компонент звука,и по обстоятельствам проигрывай его обращаясь непосредственно к этому компоненту,в теории звук запущеный должен прикрывать уже идущий
Tevirp #5 - 1 год назад 0
Спасибо. попробовал. Теперь звуковые объекты удаляются сразу, но все равно звук удаленых объектов проигрывается до конца
нет не так
Взял полность ваш скрипт попробовал. Но у меня там идёт несколько видов звука под разные условия. И при выполнении остаётся только 1 самый последний когда нужно несколько.
Пример бегал и стрелял. Если бежит. Норм, но при выставлении звук бега прекращается, включается выстрел. И наоборот.
Попробовал в условия поменять на y_audioClips[y_soundNum. Но при этом объекты созданные удаляются, а звук проигрывается до конца
А что за вариант с аудиодорожкой?
ledoed #6 - 1 год назад (отредактировано ) 0
GameObject y_gameObject;

public void PlaySound(int y_soundNum)
{
	if(y_gameObject) Destroy(y_gameObject );
 y_gameObject = Instantiate(y_sfx, Vector3.zero, Quaternion.identity) as GameObject;
AudioSource y_audioSource = y_gameObject.GetComponent<AudioSource>();
y_audioSource.clip = y_audioClips[y_soundNum];
y_audioSource.Play();
Destroy(y_gameObject, y_audioClips[y_soundNum].length);
}
ну конечно ваш вариант очень утечный,лутше уж уже дать юниту аудидорожку и проигрывать уже его из компонента,так как проигрывание будет прикрывать уже проигравшую музыку
Tevirp #7 - 1 год назад (отредактировано ) 0
Короче создал скрипт отдельный для создания отдельного звукового объекта
И спомощью ссылки на этот скрипт делаю условия для создания
Но при создании звуковой объект создаётся в нескольких экземплярах
Пример. Прыжок при нажатии на кнопку прыжка. Звуковой объект создаётся при каждом нажатии. Если брать переменную bool определяющую находится ли персонаж на земле или нет. То звуковой объект создаётся несколько раз до тех пор пока не преземлиться.

Подскажите как сделать так чтобы звуковой объект создавался только 1 раз при выполнении условия
ledoed #8 - 1 год назад (отредактировано ) 0
звук друг на друга накладывается чтоле
да и непонятно каких обьектов,смотри префаб или метод юзаеться оч часто
4

Отражения игнорируют меш

» Unity 3D
Я что-то не смог загуглить решения проблемы. Почему рефлекшены игнорируются мешью? В сцене стоит обычный point light за дверью, но всё равно отражения есть. Всё стоит на статике с double sided опцией.
Seanid #1 - 1 год назад 0
ENAleksey, Сначала да, не откидывал. Прогуглил, узнал, что игнорируются бекфейсы, и нужно включить дабл сайд. Включил, теперь тени отбрасывает правильно, а вот рефлекшен остался тем же.
прикреплены файлы
ENAleksey #2 - 1 год назад (отредактировано ) 0
Черная Чайка, всё-таки покажите настройки точечного источника света. Может быть, сам меш стены не откидывает тени?
Seanid #3 - 1 год назад 0
ENAleksey, да
ENAleksey #4 - 1 год назад 0
А тени для точечного источника включены?