14 септември, 2019

Определено 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 за отговори на общността.

Тагове: , , , , , , ,