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"
Надеюсь, это кому-нибудь пригодится