Определено Unity е най-популярният гейминг engine. Unity бележи началото на нов цикъл с две основни иновации в ядрото. Scriptable Render Pipeline (SRP) и Shader Graph дават на разработчиците повече мощ, докато C# Job System, Burst Compiler и ECS позволяват да се възползват от многоядрените процесори без главоболие. Unity 2018.2 се основава на тези нововъведения и добавя няколко нови функции. Някои от тях са насрочени за 2019г. Последната актуализация е от преди две седмици и затова решихме да обърнем специално внимание на най-често задаваните въпроси, свързани с Unity.
Възможността да имате даден проект, който се изгражда на всяка платформа, е лесна работа за много разработчици на игри, така че не е изненадващо, че Unity се превърна в основен инструмент за повечето игрални студия. Въпреки това, за тези, които не работят в разработването на игри, има много други възможности за създаване на прототипи, а Unity не е един от тях. За сметка на това е едно от най-мощните решения в сферата и не е трудно да се научи. Разглеждаме дискусиите, които са с най-голям брой търсения от 2009г. до сега спрямо общността във форумите на Unity.
Специални значи от уеб
Някои потребители имат проблем с четенето на европейски символи от уеб (,,,…). Опитват се да зареждат текст от заявка за php, но когато добавят специални знаци, единството не може да прочете страницата и ако кодират текста, след това трябва да го декодирате с WWW.UnEscapeURL. Но той не ги добавя, те просто са пропуснати. Скрипът е UTF-8, така че ако добавите специални символи в string чрез код, той работи. Така се предполага продукцията на UnEscapeUrl да не е UTF-8. Опитайте да кодирате знаците във вашия php код, като използвате rawurlencode() и вижте дали това помага. За повече информация: Страница за rawurlencode в PHP Manual.
Как се прави код за пауза в играта?
Как да направите така, че всичко в играта да спре? В редактора можете просто да кликнете върху бутона за пауза. От gamecode можете да зададете Time.timeScale на 0. Това трябва да спре по-голямата част от играта ви, ако не разчитате на неща, като например да зададете действителното време за системата. Можете също така да добавите времева скала на всичко между 0 и 1 (и дори 1 и повече), за да промените скоростта, с която се развива играта. Ако сте в редактора, имате и опцията на Debug.Break, за да поставите на пауза изпълнението. Това работи точно като натискането на бутона за пауза и се игнорира по време на изпълнение, за да можете да го използвате, за да направите „breakpoints“ за отстраняване на грешки.
Как да направим скрийншот от камера в играта?
Има дори няколко различни подхода, които можете да използвате. Има скрипт за заснемане на екранни снимки в Unifycommunity Wiki: TakeScreenshot. Методът, използван за това, е: Application.CaptureScreenshot, което също има параметър superSize за екранни снимки с висока разделителна способност, използващи цяло число на текущата резолюция на екрана. Съществува скрипт, който се основава на скрипта, публикуван в Submitting featured content. Това ще отнеме екранна снимка и ще я съхраните на диск, когато натиснете клавиша „K“. Кодът ще намерите тук.
Най-добрият начин за зареждане на голям обем particles
За да заредим около 1 милион различни частици в проект. В текстов файл, който включва всички позиции, размери и цветове на particles, но прави проблем с необходимост да се предават едновременно, но оптимално голямо количество. Има ли начин да се опростят сферите, за да действат като единични частици? Или има по-умен начин да направите това? Решението е на този линк. Можете да промените буфера за изчисляване на аргументите, за да контролирате кои се изобразяват.
C# countdown timer
Опитвате се да създате C# таймер за отброяване на ниво, което също трябва да се показва в GUI. Играчът трябва да унищожи определени елементи, за да получи допълнително време. Ако играчът просрочи времето, играта свърша. Играчът е унищожил всички елементи, които са представени с оставащото време и след това може да играе отново, за да види дали може да завърши нивото по-бързо, като остава повече време. Ако не сте сигурен какъв е сценарият за иницииране на таймер и след това броене със секунди, можете да създадете скрипт, който да следи колко време остава. Обектът за обновяване на обекта може да извади Time.deltaTime от тази стойност и да провери дали е под нулата:
var timeLeft = 30; function Update () { timeLeft -= Time.deltaTime; if (timeleft < 0) { GameOver(); } }
Други обекти биха могли да получат достъп до тази стойност, да я показват в графичния интерфейс или да го добавят, ако е необходимо.
Какви са синтактичните разлики в C# и Javascript?
Въпреки че страницата „Unity Scripting“ дава обща представа за разликите в C# срещу Javascript, тя не е изчерпателна. Целта на този отговор е да предостави единна референтна точка за синтактичните разлики между C# и JS. Всичко подробно по темата е публикувано в зоната на Unity за отговори на общността.