Ios 无法使用categoryBitMask将SCNLight灯光指定给特定SceneKit节点

Ios 无法使用categoryBitMask将SCNLight灯光指定给特定SceneKit节点,ios,objective-c,scenekit,Ios,Objective C,Scenekit,我正试图在SceneKit中使用categoryBitMask,以确保SCNLight灯光只影响某些对象节点 文档似乎很简单,但我无法使事情正常工作 例如,以下是我的灯光: SCNLight *lightFront = [SCNLight light]; lightFront.color = [UIColor colorWithWhite:0.90f alpha:1.0f]; lightFront.type = SCNLightTypeOmni; lightFront.castsShadow =

我正试图在SceneKit中使用
categoryBitMask
,以确保
SCNLight
灯光只影响某些对象节点

文档似乎很简单,但我无法使事情正常工作

例如,以下是我的灯光:

SCNLight *lightFront = [SCNLight light];
lightFront.color = [UIColor colorWithWhite:0.90f alpha:1.0f];
lightFront.type = SCNLightTypeOmni;
lightFront.castsShadow = YES;
lightFront.categoryBitMask = 2;
这是我的对象节点:

characterNode = [SCNNode node];
SCNScene *characterScene = [SCNScene sceneWithURL:[[NSBundle mainBundle] URLForResource:@"character_idle" withExtension:@"dae"] options:nil error:nil];
for( SCNNode *node in characterScene.rootNode.childNodes ) {
    node.categoryBitMask = 2;
    [characterNode addChildNode:node];
}
characterNode.categoryBitMask = 2;
两种情况下的
categoryBitMask
匹配。但是<代码>lightFront不影响characterNode

但是,如果我将灯光的
类别BitMask
更改为3,则节点将显示灯光:

lightFront.categoryBitMask = 3;
这应该正好相反,对吗

场景中的其他对象节点——即使是那些具有不同的
类别BitMasks
——似乎都获得相同的照明效果。这意味着,无论
categoryBitMask
如何,上面的
lightFront
都将在我的场景中的所有对象节点上可见或不可见。据我所知


救命啊

我不确定这一点,但我认为问题可能是因为您使用的是int而不是bit。尝试将1替换为
0b1
,2替换为
0b10
,3替换为
0b11
等。这可能不是问题的原因,但至少会消除一个可能的混淆源。for循环将所有characterScene.rootNode.childNodes复制到characterNode,但从未添加到场景中…?我没有包含所有代码,我认为是相关的位。注意
2&3!=0
因此,为灯光的位掩码设置
2
3
应该会得到相同的结果。@m语言:奇怪,但这实际上改变了效果。不一样!