首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SCNText忽略NSAttributedString属性

SCNText忽略NSAttributedString属性
EN

Stack Overflow用户
提问于 2022-09-29 14:25:13
回答 1查看 40关注 0票数 0

虽然docs声称SceneKit的SCNTextNSAttributedString一起工作,但似乎完全忽略了以下NSAttributedString属性(也许还有其他属性):

  1. shadow
  2. strokeColor
  3. strokeWidth
  4. foregroundColor

然而,SCNText确实遵守NSAttributedStringfont属性--而且它确实在屏幕上显示。

我想要做的是给我的SCNText添加一个笔画。我不想为这样一个简单的用例使用SpriteKit覆盖。

从医生那里:

当您从属性化字符串创建文本几何时,SceneKit根据字符串中的属性对文本进行样式设置,而SCNText对象的属性确定没有样式属性的字符串部分的默认样式。

这是我正在做的代码。此代码将生成白色填充的文本,字体正确,但没有阴影或任何类型的笔画:

代码语言:javascript
复制
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吗?我看到了这个问题,但它是关于填充颜色,而不是笔画,也没有解决我的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-30 09:21:19

正如您已经发现的(以及其他人已经注意到的),您不会自动获得在SceneKit中呈现的属性化字符串的所有属性。想想你在画什么(比如文字的形状),而不是你如何画它们(如颜色、阴影等)。SceneKit使用的全部是几何学。

如果你想要轮廓-触摸3D文本,那么你可能必须从字体中获得路径,并将其用于几何而不是SCNText。我写了这类,但是现在代码已经很古老了,我不知道它是否还能工作,但是它应该足够让你达到目的。

你也可以把文字渲染成图像,并把它作为广告牌上的纹理,除非你真的希望它成为3D场景的一部分。但到目前为止,雪碧套件的覆盖看起来并不那么复杂,是吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73897196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档