Intereting Posts
Error Domain = EKCADErrorDomain Code = 1013 «Операция не может быть выполнена. (EKCADErrorDomain error 1013.) " Попытка изменить цвет MKPointAnnotation, но потерять название Ссылка на объект возвращает null (наследование класса iOS) Trigger.io IOS пакет дублирующих файлов Обнаружение, если пользователь воспроизводит музыку из другого приложения Использование Segmented Control Swift 3 SQLite Manager – Скопируйте таблицу в другую базу данных .sqlite Интеграция Twitter с помощью SLComposeViewController в iPhone ReloadRowsAtIndexPaths вызывает ошибку в симуляторе Как получить другой значок приложения из процесса pid в системе iOS? Цель c – странное поведение с int Как создать автоматически увеличивающийся ключ в Firebase? Элемент доступа iOS XCUITests по доступности отладка xcode 4: говорит, что она запускает приложение на устройстве, но ничего не происходит Как добавить логин для входа в систему eckka?

Могу ли я использовать PNG-последовательность в качестве анимированного материала на объекте SceneKit?

Я хотел бы программно изменить материал объекта, созданного с помощью SceneKit в iOS. Но я хотел бы использовать анимированные файлы изображений. PNG-последовательности отлично работают в iOS для таких вещей, как UIImageViews – как я могу использовать их в качестве материала в SceneKit?

Что-то вроде этого не работает:

floor.firstMaterial.diffuse.contents = [UIImage animatedImageNamed:@"ANIMATION_" duration:6.0f]; 

Благодаря!

нет ничего, что можно использовать из коробки.

Я бы сделал это с помощью модификаторов шейдеров. Если вы упаковываете все свои изображения в одно изображение, вы можете использовать модификатор (в SCNShaderModifierEntryPointGeometry входа SCNShaderModifierEntryPointGeometry ), чтобы обновлять координаты текстуры объекта в соответствии с u_time чтобы каждое u_time другое изображение (или суб-изображение атласа) ,

Существует гораздо более простое решение (или, по крайней мере, я думаю, что это проще), хотя я не могу подтвердить, насколько он эффективнее. Я тестировал это на iPad mini (1-й ген), и он отлично работает.

Вместо того, чтобы помещать текстуру, которая является спрайтом в содержимое материала (и скрипка с шейдером), вместо этого вы можете разместить там объект SKScene.

Таким образом, вы можете просто использовать объекты SKSpriteNode в SKScene и анимировать их с помощью объектов SCNAction. Вся анимация может управляться легко и мощно, без необходимости касаться шейдерного кода.

  NSArray<SKTexture*> *cursorTextures = @[ [SKTexture textureWithImageNamed:@"tilecursor1.png"], [SKTexture textureWithImageNamed:@"tilecursor2.png"], [SKTexture textureWithImageNamed:@"tilecursor3.png"], [SKTexture textureWithImageNamed:@"tilecursor4.png"], [SKTexture textureWithImageNamed:@"tilecursor5.png"] ]; SKSpriteNode *cursorSprite = [SKSpriteNode spriteNodeWithTexture:cursorTextures[0]]; cursorSprite.position = CGPointMake(cursorSprite.size.width/2.0, cursorSprite.size.height/2.0); [cursorSprite runAction:[SKAction repeatActionForever:[SKAction animateWithTextures:cursorTextures timePerFrame:0.1]]]; SKScene *cursorScene = [SKScene sceneWithSize:cursorSprite.size]; cursorScene.backgroundColor = [UIColor clearColor]; [cursorScene addChild:cursorSprite]; ... self.cursor.material.diffuse.contents = cursorScene;