Search Unity

Unity 4.6.3: поддержка Metal и обновление il2cpp для iOS

, 19 февраля, 2015

Мы рады объявить, что сегодня вышел релиз Unity 4.6.3, который вы можете скачать на нашем сайте.

С этим релизом мы добавляем поддержку Metal API на iOS в Unity 4.x. Тем самым Unity 4.6.3 — это первая версия Unity в цикле 4.x, которая поддерживает две очень важные на данный момент в мире iOS технологии: 64-х битную архитектуру (используя il2cpp) и Metal. Также Unity 4.6.3 включает множество важных апдейтов в il2cpp для iOS 64-бит.

Что такое Metal?

Metal — это новый низкоуровневый графический API, разработанный Apple для iOS 8 и старше. Он позволяет свести к минимуму нагрузку на CPU при отрисовке 3D-графики на GPU. Таким образом, приложения, использующие Metal, потребляют меньше ресурсов CPU и могут использовать освободившееся процессорное время для каких-то других своих нужд.

Вот перевод отрывка из описания технологии с сайта Apple:

“Metal предоставляет доступ к GPU с минимальными накладными расходами, что позволяет вам использовать на полную мощность графические и вычислительные возможности системы в вашем приложении на iOS 8. Простой API, прекомпилированные шейдеры и эффективная многопоточность — всё это позволяет с использованием Metal вывести вашу игру или графическое приложение на новый уровень производительности и даёт вам множество новых возможностей.”

За более подробной информацией зайдите на официальный сайт Apple посвященный технологии Metal.

Как включить Metal в игре?

Как и все остальное в Unity, поддержка Metal работает автоматически без необходимости каких-либо действий со стороны разработчика. Metal по умолчанию будет использоваться на всех устройствах. Если вам нужен более точный контроль, в Player Settings вы найдёте опцию Graphics API, значение которой можно выставить в: Automatic, Metal, OpenGL ES 3.0 и OpenGL ES 2.0.

Если вам нужно узнать во время работы приложения. на каком API вы сейчас работаете, вы можете использовать следующий код:
if (SystemInfo.graphicsDeviceVersion.StartsWith(«Metal»))

Мы постарались сделать все возможное, чтобы использование технологии Metal для разработчиков было как можно проще и незаметнее, но если у вас возникли какие-то проблемы, пожалуйста, сообщите нам об этом!

Обновление il2cpp для iOS 64 бит

Unity 4.6.3 — это критически важный апдейт il2cpp для iOS 64 бит:

  • Было исправлено 50 различныйх багов и крэшей. Мы очень благодарны вам за обратную связь, что позволило нам очень быстро двигаться вперед.

  • Добавлена поддержка отсутствующих .NET классов: ThreadPool, Asynchronous Sockets, WebRequest.

  • Добавлена поддержка асинхронных делегатов (BeginInvoke/EndInvoke).

Мы активно работаем над улучшением поддержки iOS 64 бит и il2cpp в Unity 4.6.x, которые будут доступны в патч-релизах, а также в Unity 5. Если у вас возникают какие-то проблемы, пожалуйства, присылайте баг-репорты и спрашивайте нас на форумах.

Другие улучшения

Unity 4.6.3 — это не только поддержка Metal и il2cpp на iOS. В этот релиз вошли огромное число исправлений и улучшений для Android, iOS; в таких областях, как 2D, анимация, шейдеры, UI и других. Полный список всех изменений как всегда доступен в release notes.

42 replies on “Unity 4.6.3: поддержка Metal и обновление il2cpp для iOS”

I found this article on 20 spot in google search results, you should lower your bounce rate. You will see results fast, i know what can help you, just type in google for: Dasusuri’s Bounce Plugin

Please allow us to disable metal for automatic mode.
So we can switch between ES2/3 and ignore metal.

My app does not need to be bleeding edge, but ES2/3 seem fairly stable so far.

Still does not support EndInvoke!

Error : NullReferenceException: A null value was found where an object instance was required.
at DragGameOption+GetOptionResultHandle.EndInvoke (IAsyncResult result) [0x00000] in :0

Please fix this bug ASAP!

I don’t know why 4.6.3 changed the launch screen for all iPhones to a 320×480 size image and just scaled it to adapt all iPhones. That’s quite a lazy and worst way. Imagine that, the user got a iPhone 6 plus and open our app, it turns out he sees a 320×480 pixels launch image. We are supposed to offer a high resolution launch image to give end users a good impression. But 4.6.3 screwed it up.
Hi guys, is it a just temporary solution or you are going to insist it in the future?
Come on, seriously!

just quote the comments in the code from SplashScreen.mm. Jumped high when I saw it

// Launch screen uses the same aspect-filled image for all iPhones. So,
// we need a special case if there's a launch screen and iOS is configured
// to use it.
// Note that we don't use launch screens for iPads since there's no way
// to use different layouts depending on orientation.
if (m_XibView == nil)
{
m_XibView = [[[[NSBundle mainBundle] loadNibNamed:@"LaunchScreen" owner:nil options:nil] objectAtIndex:0] retain];
[self addSubview:m_XibView];
}

Hi,

Have you set up the iPhone 6+ splash images? Unity uses them for the default launch screen and fall backs to the shared mobile splash only if they are not set up. Note, that you can always disable the launch screen and revert to the old behavior, but unfortunately in that case the app won’t be featured by Apple.

I don’t know why 4.6.3 changed the launch screen for all iPhones to a 320×480 size image and just scaled it to adapt all iPhones. That’s quite a lazy and worst way. Imagine that, the user got a iPhone 6 plus and open our app, it turns out he sees a 320×480 pixels launch image. We are supposed to offer a high resolution launch image to give end users a good impression. But 4.6.3 screwed it up.
Hi guys, is it a just temporary solution or you are going to insist it in the future?
Come on, seriously!

just quote the comments in the code from SplashScreen.mm. Jump high when I saw it

// Launch screen uses the same aspect-filled image for all iPhones. So,
// we need a special case if there's a launch screen and iOS is configured
// to use it.
// Note that we don't use launch screens for iPads since there's no way
// to use different layouts depending on orientation.
if (m_XibView == nil)
{
m_XibView = [[[[NSBundle mainBundle] loadNibNamed:@"LaunchScreen" owner:nil options:nil] objectAtIndex:0] retain];
[self addSubview:m_XibView];
}

Hi!
I’m experiencing big CPU-spikes (20-25ms), every other frame, on an iPad Air 1 when building with Metal enabled. When running with GLES 3.0 it works fine. Bug report is filed.

Another issue i am experiencing with IOS 8.1.3 is that the Input.location is not working, it will not finish the LocationServiceStatus.Initializing state.

Please implement .net code for System.Globalization.CultureInfo class.
for example : something like lack of createspecificculture function code.
as of mono 2.x. it works well, but Il2cpp missing alot of .net code. please fix thanks.

Testing 4.6.3 with a 2D game I’m developing, there is a noticeable drop in frame rate when using Metal on my iPad Air, whereas forcing OpenGL ES 3.0 (or 2.0) results in the original (better) frame rate.

At first I thought this may have been related to IL2CPP, but I made sure I was testing in Release mode and the issue remains the same.

Any known issues?

First thing I’d try: make sure to disable «metal API validation» in Xcode scheme settings (it’s on by default I think). Validation catches more possible errors, but has quite a high overhead on the CPU.

If it’s not that… file a bug with a repro please.

Thanks for your suggestion Aras.

Unfortunately this didn’t work for me. Additionally, I tried many other settings/configurations and issue persists.

I have logged a bug with a sample project, with the necessary steps, to reproduce and demonstrate the issue.

Even after 4.6.3p1 we still see regular, short framerate drops when using metal — game plays smoothly for a few secs and then shortly framerate drops in a very noticable way. We do not see this when using OpenGL ES.

I have several problems with the Unity Free 4.6.3 version:
— link errors when compiling in ARM64 (was OK with 4.6.2p1)
— splash screen error

Trying to go back to 4.6.2p1

Me too — same as before.

The workaround is just : delete LaunchScreen.xib , LaunchScreenImage-Portrait.png and LauncScreenImage-Landscape.png .
In info.plist delete the key UILaunchStoryboardName~Iphone.

thanks, Alexander! I’m also getting the splash screen bug, free unity on iOS

Unfortunately, this fix didn’t work for me. I removed LaunchScreen.xib & LaunchScreenImage-Portrait.png, but I could not find LauncScreenImage-Landscape.png

Also, when I edited the info.plist, I made it unreadable. I was trying just to remove the key, and then that whole section, but I don’t know enough about that language to understand. I also tried deleting the info.plist.

Alexander, I realize now you meant «LaunchScreenImage-Landscape.png» — found that and deleted it also. I still get the splash screen error, probably because i don’t know what i’m doing in the info.plist file

I am also experiencing issues with the splashScreen. Ive tried all i can find, including the mentioned above.

Environment:

Iphone5 IOS 8.1.3
Xcode 6.1.1
Unity3D 4.6.3 (free)

I tried downgrading, but then i run into SDK compatibility issues.

It seems this is an issue every time there is a major update. What do i do, i basically can’t do anything anymore. Do we just wait until this is fixed by the Unity team? If so, when will a fix be expected?

If you have «just Metal» selected, then it will require Metal. Use Automatic to have Metal->GLES3->GLES2 fallback chain. (or alternatively for the brave, find the selection code in the trampoline and modify to do whatever you wish)

Comments are closed.