SCNText - фон "речевой пузырь"

Как я могу вставить фон (например, "речевой пузырь" или прямоугольник) в текст SCNtext? В частности, если я вставлю "Hello World" как SCNText (и, очевидно, затем как SCNNode в сцене), то как я могу добавить фон только для этого текста? Будет ли это UIimage, который будет вставлен как SCNNode в ту же позицию в "Hello World" (имейте в виду, что в SceneKit нет ничего в качестве фона SCNNode)

2 ответа

Решение

Вы можете использовать SCNPlane в качестве другого SCNNode, назначить SCNMaterial для его геометрии и установить свойство diffuse.contents этого материала для фонового изображения, которое вы хотите использовать. И затем да, поместите его в ту же позицию, что и узел SCNText, но со значением position.z, немного меньшим, чем у узла SCNText, чтобы он был позади него. Если вы планируете переместиться к текстовому узлу или повернуть его, добавьте узел SCNPlane в качестве дочернего узла текстового узла.

Вот пример кода. Это добавит SCNPlane в качестве фона SCNTextNode:

let minVec = textNode.boundingBox.min
let maxVec = textNode.boundingBox.max
let bound = SCNVector3Make(maxVec.x - minVec.x, 
                           maxVec.y - minVec.y, 
                           maxVec.z - minVec.z);

let plane = SCNPlane(width: CGFloat(bound.x + 1), 
                    height: CGFloat(bound.y + 1))
plane.cornerRadius = 0.2
plane.firstMaterial?.diffuse.contents = UIColor.black.withAlphaComponent(0.9)

let planeNode = SCNNode(geometry: plane)
planeNode.position = SCNVector3(CGFloat( minVec.x) + CGFloat(bound.x) / 2 , 
                                CGFloat( minVec.y) + CGFloat(bound.y) / 2,CGFloat(minVec.z - 0.01))

textNode.addChildNode(planeNode)
planeNode.name = "text"

Надеюсь, это кому-нибудь пригодится

Другие вопросы по тегам