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

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

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

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

Editor overhead 80-90%

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

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

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

Читать далее...
prog #1 - 3 месяца назад 0
Alex_Hell,
Не знаю как у вас в шарпах, а на джаве я пользовался встроенной в среду разработки возможностью выполнять перед компиляцией проекта код, получающий информацию об аннотациях в коде проекта - кастомный сериализатор-десериализатор с генерацией кода писался очень быстро на основе этого.
Doc #2 - 3 месяца назад 2
Намеки на то, сколько времени занимает подобное дело - оверэстимейшн. Написание текстовой сериализации для объекта занимает минуты.
Alex_Hell #3 - 3 месяца назад (отредактировано ) 0
Вы понимаете, как работает ваша сериализация. И если будете ловить какие-то баги, то понимаете, как ее исправить, чего не скажешь о какой-то либе, начинку который вы не знаете
только в готовых решениях багов как правило почти нет, или очень редкие, и при желании можно выбрать либу-конкурентов без этих багов если их править не будут.. а свой велосипед надо самому поддерживать. в том числе и баги фиксить, и функционал добавлять - всякие подтипы полиморфные в списке (как Doc указывал, а я сказал что они уже реализованы) много чего еще из-коробки есть
  1. производительность там где нужна - можно юзать protobuf или иже с ними бинарные.. текстовая десериализация в/из json не будет самописная быстрее чем готовые либы json, за счет чего? рефлексию если убрать даже - есть генераторы кода, которые без рефлексии компилят, и при этом будет чуть быстрей, но руками такое городить - долго, я имею ввиду свой генератор кода, где будет вида
output.writeTag("health", health);
output.writeHierarchyOfObject("target", target); где target спец подтип, и в него тоже вручную сериалайзить
так вот руками написанное такое всмысле без генератора - будет с рефлекскией - и медленно, а без рефлексии нужен свой велосипед - жесть будет
.. про генератор я имел ввиду что по CLASS декларации само сгенерит код того вида выше с writeTag которые руками не надо писать - и будет быстрее чем любой самописный елосипед, просто это доп требование - если надо - найдете сериалайзер даже json такой
\ protobuf - уже юзает такие же генераторы, без рефлексии
GeneralElConsul #4 - 3 месяца назад (отредактировано ) 0
Перечитал комментарии. На данный момент мое дилетантское мнение таково, что json дает хорошую читаемость в простейших случаях + всякие библиотеки, чтоб не писать самому. Во всех остальных случаях, думается, своя сериализация будет лучшим решением, потому что:
  1. Вы понимаете, как работает ваша сериализация. И если будете ловить какие-то баги, то понимаете, как ее исправить, чего не скажешь о какой-то либе, начинку который вы не знаете.
  2. По производительности как конечное решение своя кастомная сериализация всегда лучше.
Alex_Hell #5 - 3 месяца назад 0
Не мог пройти мимо, не ответив на заблуждения вышеотписавшихся.
  1. сериализация вручную пилится в редких случаях, я за свои 14 лет опыта программирования пришел в выводу что юзать готовые решения - лучше, в 1ю очередь изза их сторонней поддержки и правки багов, плюс функицонала больше чем вы сами навелосипедите
  2. основная задача при сериализации с любыми решениями хоть готовыми хоть вашими - описать данные, пишите C# классы, и когда структуры классов и иераррхии вложенности усложняются - как раз выгоднее писать нормальные C# классы и отдать на откуп системе их перевод в текст JSON/XML или даж бинарный, а не самому писать как каждый подтип будет преобразовываться
  3. нет проблем сохранять полиморфные объекты в JSON, юзайте JsonDotNet с опцией чтобы писало $type при сериализации и соответсвенно нужный подкласс инстанциируется при десериализации
  4. при текстовом формате сериализации, что JSON что XML, не столь важен выбор, когда речь о читаемости итоговых сериализованных файлов - это редкое действие, к тому же открываете в текст редакторе, и при сериализации включаете PrettyPrint чтобы на 1 строке был 1 атрибут, а не все в 1 строку
GeneralElConsul #6 - 1 год назад (отредактировано ) 0
Как только данные усложняются формат становится не сильно более понятным чем бинарный.
Как и твой приведенный, разве нет? Визуальный мусор есть, но сам формат простой. У меня не было случаев, когда не разобрался при просмотре тестового сохранения или я не писал ничего сложного.
Мои причины использования json очень простые: она почти ничем не хуже твоего метода; часто можно не писать парсер, а использовать работающую либу; этот формат известен всем в отличие от своего персонального.
Но твою позицию со своим форматом пониманию.
Doc #7 - 1 год назад (отредактировано ) 2
Я согласен что если есть зависимость от сторонних тулз - можно и подстроиться под формат. В основном правда очень часто единственной тулзой является сам движок игры. И свой сериалайз + парсинг пишется очень и очень быстро, особенно в хайлевел языках, где работа со строками уже налажена. К примеру взгляните на:
здесь функция split_into_words_and_quoted_pieces из 60 строк это весь токенайзер. Далее парсинг совершенно тривиален и добавлять новые части к нему ничего не стоит.
он определяет скобки как блок данных, все нормально читается.
Это ничего не дает, в формате куча визуального мусора и он слишком прост чтобы в него сериализовать более сложные данные, например список из объектов разных под-типов.
Когда в жсоне один линейный список он читается нормально. Как только данные усложняются формат становится не сильно более понятным чем бинарный.
GeneralElConsul #8 - 1 год назад 0
json рулит: по структуре проще xml, а сама структура более понятная чем прямой текст. Про читаемость - открыл в Notepad++ и поехали, он определяет скобки как блок данных, все нормально читается.
prog #9 - 1 год назад 0
Doc, Согласен. Но на самом деле сильно зависит от юзкейсов. Например, собрать прототип на готовой JSON сериализации будет быстрее, если своей либы еще нет готовой - запилить потом другой алгоритм сериализации никто не мешает, когда понадобится и будет дополнительно время на это.
Сам пользуюсь JSON-ом для хранения статичных данных в своем основном проекте т.к. руки не дошли пилить кастомную сериализацию, а анрил из коробки понимает превращение таблиц данных в JSON и обратно и, соответственно, в наличии визуальный редактор и другие плюшки, которые иначе пришлось бы пилить вручную либо с нуля либо допиливать к существующим инструментам. Правда руками я их в итоге трогаю довольно редко, а ингейм сохранения всеравно в бинарниках.
Doc #10 - 1 год назад (отредактировано ) 4
Все это медленнее (за исключением бинарной сериализации) и менее читаемо чем просто ручная запись файлов в плейн-текст формате уровня:
game_state
money 999.99
lives 12
Текст разбивается по пробелам и лайнбрейкам и ручками пишется recursive descent parser (простейшая вещь с которой справится и школьник). Подобный формат легко править и читать даже без наличия продвинутого редактора, он нормально будет смотреться в гит диффах. При желании легчайшим образом добавляется собственное версионирование, к примеру:
game_state
money 999.99 @Since 1.2
lives 12
Одумайтесь. Жсон и хмл совершенно нечитаемые форматы при больших объемах древовидных данных.
alexprey #11 - 1 год назад 0
Ну так поведай нам.
Обратная-совместимость данных. Что делать, когда ты уже в продакшене, а надо расширить или урезать данные, сериализованные в формате X
Msey #12 - 1 год назад (отредактировано ) 0
1.5к объектов не показатель
Msey
более 1500
Самый важный показатель сериализации не рассмотрен
Ну так поведай нам.
alexprey #13 - 1 год назад -3
Если честно, то сравнение сериализации представлено так-себе. 1.5к объектов не показатель. Самый важный показатель сериализации не рассмотрен.
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 - 4 месяца назад 0
GeneralElConsul:
Если ты не понимаешь как это сделать, то тебе лучше сначала научится C# по-нормальному, книгу какую-нибудь прочитай что ли, там часто примеров много.
Я прям счастлив, я изучаю, но пока только на самом начале) Спасибо большое, учту ваш совет)
GeneralElConsul #2 - 4 месяца назад (отредактировано ) 0
Если ты не понимаешь как это сделать, то тебе лучше сначала научится C# по-нормальному, книгу какую-нибудь прочитай что ли, там часто примеров много.
public class SpawnBombs : MonoBehaviour {
	...
	float timer = 1.2f;
	...
	IEnumerator Spawn ()
	{
		...
		timer -= 0.2f;
		yield return new WaitForSeconds (timer);
	}
}
Proxy #3 - 4 месяца назад 0
JMCode:
делаеш цикл и время если время 1 сек прошло то выполняем иначе след цикл пока это время находит то уменшаем 1 сек на 0.50 и так далее -0.1 до 0 и закончим цикл вот и суть
Ничего не понял, можно приблизительный код, если не сложно)
JMCode #4 - 4 месяца назад 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 - 7 месяцев назад 0
Блочишь прыжок, или булевой или проверкой (касается ли перс чего то)
 void OnCollisionEnter()
    {
        Jumping = false;
    }
А перс отпускается обратно?
ledoed #2 - 7 месяцев назад -2
надо проверять на то что юнит находиться на поверхности либо райкастом либо колизиями,в стандартном ассете посори как устроено физика прыжка,
5

Прыжок

» Unity 3D
Привет, мне нужно сделать прыжок в игре так что бы при нажатии на экран андроида он подпрыгивал. Физику я уже сделал. Все пишут код по разному, каждый по своему и многое не работает! У меня Unity 5 (32 битная), c# скрипт и MonoDevelor. А персонажа зовут person
ledoed #1 - 7 месяцев назад (отредактировано ) -2
ту конструкцию что я скинул должна быть в update и переменная grounted должна быть реализована тобой
tsiganock #2 - 7 месяцев назад (отредактировано ) 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 - 7 месяцев назад (отредактировано ) -2
нуна примерно такую конструкцию
        if (Input.touchCount > 0)
        {

            foreach(Touch t in Input.touches)
            {

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

            }


        }
grounted -это булевая переменая отвечающая перс твой косаеться вообще земли
strenght - это сила с которой твой чел полетит в адфосе изначально импульс
tsiganock #4 - 7 месяцев назад (отредактировано ) 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 - 7 месяцев назад -2
отлавливаешь нажатие тача 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 - 10 месяцев назад (отредактировано ) -2
Что то все равно не получается(
ledoed #2 - 10 месяцев назад 0
а на оф юньке там что нет уроков или материалов как управлять звуком
Tevirp #3 - 10 месяцев назад -2
Делал таким образом компанией звука на персонажа при ходьбе, но весь интерес в том что у меня сделан джойстик для движения.
И сделать условия на передвижения звук все равно проигрывается 1 за другим даже не успев начаться
Ledoe подскажи пожалуйста сайт где можно норм озвучку сделать, ато чувствую моим макаром я каши много не сварю)))
ledoed #4 - 10 месяцев назад 0
ну смари есть юнит на него навесил компонент звука,и по обстоятельствам проигрывай его обращаясь непосредственно к этому компоненту,в теории звук запущеный должен прикрывать уже идущий
Tevirp #5 - 10 месяцев назад 0
Спасибо. попробовал. Теперь звуковые объекты удаляются сразу, но все равно звук удаленых объектов проигрывается до конца
нет не так
Взял полность ваш скрипт попробовал. Но у меня там идёт несколько видов звука под разные условия. И при выполнении остаётся только 1 самый последний когда нужно несколько.
Пример бегал и стрелял. Если бежит. Норм, но при выставлении звук бега прекращается, включается выстрел. И наоборот.
Попробовал в условия поменять на y_audioClips[y_soundNum. Но при этом объекты созданные удаляются, а звук проигрывается до конца
А что за вариант с аудиодорожкой?
ledoed #6 - 10 месяцев назад (отредактировано ) 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 - 10 месяцев назад (отредактировано ) 0
Короче создал скрипт отдельный для создания отдельного звукового объекта
И спомощью ссылки на этот скрипт делаю условия для создания
Но при создании звуковой объект создаётся в нескольких экземплярах
Пример. Прыжок при нажатии на кнопку прыжка. Звуковой объект создаётся при каждом нажатии. Если брать переменную bool определяющую находится ли персонаж на земле или нет. То звуковой объект создаётся несколько раз до тех пор пока не преземлиться.

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

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

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

Где мне лучше создать планируемое?

» Unity 3D
Хочу создать игру, с сюжетной линией такой, как в помойном WoW. Тоесть с длинным и обширным сюжетом, множестком заданий и сюжетных прохождений.
И вот не знаю, на движке варика запилить компании, или в Юнити 3Д сделать это? Опытные люди, помогите, это важно
Cancel #26 - 1 год назад -6
Предлагаю следующее, если ты в течении месяца мне скинешь екзешник, в котором будет интерфейс стартового меню и анимированные переходы между кнопками этого меню, я закину тебе 500$ на твой банковский счет или qiwi
Соглашайся! Найдёшь исполнителя со стороны, который сделает это за 100 баксов!
Araders #27 - 1 год назад 0
Tiodor, достаточно давно.
Tiodor #28 - 1 год назад 0
Графические функции это что-то типа как GUI в Варкрафте - доступны только в платной версии програмы.
лол, сколько лет ты не заходил в юньку? store.unity.com/ru/products/unity-pro
bifurcated #30 - 1 год назад 0
Есть ещё одно "но", карту сделанную на WordEditor ты не продаш и ни кто у тебя её не купит. Да и Warcraft выпустили в 2003 это тебя не напрягает? Unity с каждым годом развивается, да и тебе для начала надо изучить C#, 3D программу и Photoshop, чтобы воплотить свою идеи в движке. Мидгард? С таким названием была мобильная MMORPG.
Msey #31 - 1 год назад (отредактировано ) 0
Кроме того, если заюзаешь RenderEdge, сможешь превзойти по качеству любой проект на юнити.
На юнити можно сделать все, что имеется в варкрафте - и даже больше, не проиграв по качеству.
Варик все таки ущемлен по функционалу. А с юнити...здесь вопрос упирается в количество просранного на это время и в "на кой хер это вообще нужно".