SCNNodeオブジェクトをコピーしたい
SceneKitのSCNNodeオブジェクトをコピーしたかったんだわ。
copyでいいのかな、、、うまくいかねえ、mutableCopyかな、、、?これもだめか、、、調べるとリファレンスに
clone - SCNNode | Apple Developer Documentation
geometryやmaterialも参照しちゃうので別に使うなら新たに設定しないとだめってことか。なるほどね。
ところが、これでもうまくいかない。新しいオブジェクトのscaleもpositionも設定しても変化ない、、、つまり元のオブジェクトと変わってない、、、?

↑こんな感じに別な場所やscaleで描こうとしてるのに同じ場所に同サイズで表示してるので時折黒い面(コピー後のオブジェクトの色)が描画される、というよく見るよね、3D関連やってると。
もう新しく作るものなんてないのでは?と悩むこと幾星霜、ようやく気付いたのがこのコピー元のオブジェクトにはボーンがあって動きはそっち優先になってたのが原因。
copyでいいのかな、、、うまくいかねえ、mutableCopyかな、、、?これもだめか、、、調べるとリファレンスに
- (void)duplicateNode:(SCNNode *)node withMaterial:(SCNMaterial *)material { SCNNode *newNode = [node clone]; newNode.geometry = [node.geometry copy]; newNode.geometry.firstMaterial = material; }なんてある。↓ここね。
clone - SCNNode | Apple Developer Documentation
geometryやmaterialも参照しちゃうので別に使うなら新たに設定しないとだめってことか。なるほどね。
ところが、これでもうまくいかない。新しいオブジェクトのscaleもpositionも設定しても変化ない、、、つまり元のオブジェクトと変わってない、、、?

↑こんな感じに別な場所やscaleで描こうとしてるのに同じ場所に同サイズで表示してるので時折黒い面(コピー後のオブジェクトの色)が描画される、というよく見るよね、3D関連やってると。
もう新しく作るものなんてないのでは?と悩むこと幾星霜、ようやく気付いたのがこのコピー元のオブジェクトにはボーンがあって動きはそっち優先になってたのが原因。
{ newNode.skinner = nil; }として消してやれば新しいSCNNodeオブジェクトは意図通りに動いてくれた。ふー。
スポンサーサイト
<< オブジェクト選択時の輪郭線を実装したい TopPage TFRecordで多次元配列を扱う >>
トラックバック
トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1110-625bef38
https://ringsbell.blog.fc2.com/tb.php/1110-625bef38