虽然docs声称SceneKit的SCNText与NSAttributedString一起工作,但似乎完全忽略了以下NSAttributedString属性(也许还有其他属性):
shadowstrokeColorstrokeWidthforegroundColor然而,SCNText确实遵守NSAttributedString的font属性--而且它确实在屏幕上显示。
我想要做的是给我的SCNText添加一个笔画。我不想为这样一个简单的用例使用SpriteKit覆盖。
从医生那里:
当您从属性化字符串创建文本几何时,SceneKit根据字符串中的属性对文本进行样式设置,而SCNText对象的属性确定没有样式属性的字符串部分的默认样式。
这是我正在做的代码。此代码将生成白色填充的文本,字体正确,但没有阴影或任何类型的笔画:
let labelNode = SCNNode()
let label = SCNText(string: "\(targetLevel)", extrusionDepth: 0.0)
let font = UIFont(name: "Whatever", size: 4.0)
let shadow = NSShadow()
shadow.shadowBlurRadius = 1.0
shadow.shadowColor = UIColor.black
let attStr = NSAttributedString(string: "\(targetLevel)", attributes: [.font: font!, .shadow: shadow, .strokeColor: UIColor.black, .strokeWidth: 0.5])
label.string = attStr
label.alignmentMode = "kCAAlignmentCenter"
label.flatness = 0.01
//Using a big font and then scaling the node down to make it look less jagged:
labelNode.scale = SCNVector3(0.25,0.25,0.25)
labelNode.geometry = label
labelNode.castsShadow = false
parent.addChildNode(labelNode)问题:我是不是做错了什么--或者这是对SceneKit的限制?还有其他的方法来画一个SCNText吗?我看到了这个问题,但它是关于填充颜色,而不是笔画,也没有解决我的问题。
发布于 2022-09-30 09:21:19
正如您已经发现的(以及其他人已经注意到的),您不会自动获得在SceneKit中呈现的属性化字符串的所有属性。想想你在画什么(比如文字的形状),而不是你如何画它们(如颜色、阴影等)。SceneKit使用的全部是几何学。
如果你想要轮廓-触摸3D文本,那么你可能必须从字体中获得路径,并将其用于几何而不是SCNText。我写了这类,但是现在代码已经很古老了,我不知道它是否还能工作,但是它应该足够让你达到目的。
你也可以把文字渲染成图像,并把它作为广告牌上的纹理,除非你真的希望它成为3D场景的一部分。但到目前为止,雪碧套件的覆盖看起来并不那么复杂,是吗?
https://stackoverflow.com/questions/73897196
复制相似问题