マインドフレイアの乗っ取りを実装しました。ここまで来るのに時間かかったなあ……
ミノタウロスの掴みの処理が出来たのだからこっちもそのまま実装出来そうに見えるのですが、実はGodot-Spineの公式ランタイムでは「スケルトンのメッシュを個別に分割して表示順の調整が出来ない」という致命的な欠陥がある事に最近気づきまして……
簡単に言うと「キャラクターのパーツとパーツの間に他のキャラクターを挟む」といった表示状態を作るのが非常に困難なのです。
一応、それっぽい機能はあるのですが、滅茶苦茶に使いづらいです。
ミノタウロスの掴みの処理もかなり裏技的な実装を行っていまして、マインドフレイアの乗っ取り処理に関してはそのやり方でも上手く行かず、ここ数日は上手い回避法はないかとずっと試行錯誤を続けていたのですが、公式ランタイムのソースコードをいじる以外で問題の解決は不可能という結論に達しまして、かなり無理やりな形の実装の仕方になりました。
(パフォーマンスを無視しないやり方だと一番シンプルな方法ではあるのですが)
Godot自体はかなり扱いやすいゲームエンジンだなと感じていますし、公式ランタイムの必要な機能のリクエスト自体も送られてはいるようなので、公式ランタイムの更新を待ちながら騙し騙しやっていくしかないかな~と、ちょっと消極的な方針ではありますが、そういう方向でやって行こうと思ってます。
I’ve implemented the Mind Flayer’s takeover mechanic. It took a long time to get here…
Since I managed to implement the Minotaur’s grab mechanic, it looked like I could do this one similarly. However, I recently realized a fatal flaw in the official Godot-Spine runtime: it doesn’t allow for splitting the skeleton’s mesh into individual parts, making it impossible to adjust the display order individually.
Simply put, creating a display state like 'inserting another character between parts of the original character' is extremely challenging. While there’s technically a feature for that, its usability is so limited that it’s practically useless.
The Minotaur’s grab mechanic was implemented using a rather hacky method. When it came to the Mind Flayer takeover, though, even that method didn’t work, so I’ve spent the last few days experimenting to find a workaround. In the end, I concluded that the problem can’t be solved without modifying the source code of the official runtime. The implementation ended up being quite forceful as a result. (The approach I used is the simplest one that doesn’t completely ignore performance.)
I do feel that Godot itself is a very user-friendly game engine, and there seem to be requests for the official runtime to include necessary features, so I’ll probably have to adopt a cautious, makeshift approach while waiting for updates to the official runtime. It’s a bit of a passive plan, but I think that’s the direction I’ll go in.