1.ChatdollKitのマルチスキルを実装しようとして1日溶かしちゃった話
ChatdollKitって素晴らしいですよね!!VRM形式の3Dモデルさえ手元にあれば誰でも自分のPCやGateboxにバーチャル嫁や妹(以下バーチャル嫁と表記)を召喚できちゃうんですから!!
ですが、人の欲望というのは尽きないものでして、バーチャル嫁と会話できるようになったら満足するのではなく、もっと作りこんじゃいたくないますよね?私もそうです。
そこで、オリジナルのマルチスキルを作ってバーチャル嫁をもっと万能にしたいと考えたのはいいものの、つまずいてしまったのがマルチスキルの実装です。2023/05/09時点のChatdollKit最新版(v0.6)でマルチスキルを追加実装しようとして、どのコンポーネントをアタッチすればいいか、また、アタッチできない場合はどう修正すれば解決できるのかがわからず、過去のバージョンを解析してそこの問題解決に時間を使っちゃいました。
このフレームワークを制作してくださっているうえぞう様にコンタクトを取っても良かったのですが、エンジニアの端くれとして、まずは自分で修正してみたいと感じたため過去のバージョンもあさりながら解析させていただきました。
2.結論
プロジェクト\Assets\ChatdollKit\Examples\MultiSkills\Scripts\Router.csに実装したい拡張スキルを記述してアタッチするだけです。しかし、ver.0.6でこのコンポーネントをアタッチしようとするとエラーが起きてアタッチできません。
エラー文を和訳すると、このコンポーネントが継承元を含めてMonoBehaviourの属性を持っていないためアタッチできないそうです。
ですが、ver.0.3.2の時点ではマルチスキルが動いているのを確認しました。そこで、ver.0.3.2とver0.6のコンポーネントについて相違を調べていったところ、プロジェクト名\Assets\ChatdollKit\Scripts\Dialog\Processor\SkillRouterBase.csに過去バージョンにはあったMonoBehaviourの記述が抜けていることが判明しました。以下の通りに修正したらマルチスキルも使えるようになりました。
using System;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;
using Cysharp.Threading.Tasks;
namespace ChatdollKit.Dialog.Processor
{
public class SkillRouterBase : MonoBehaviour, ISkillRouter // MonoBehaviourを追記する
{
protected Dictionary<string, ISkill> topicResolver = new Dictionary<string, ISkill>();
public void RegisterSkill(ISkill skill)
上記の修正をして再度Router.csをアタッチしたら成功しました。どのバージョンで消えちゃったかは知りませんが本家の方で修正入るまではマルチスキルを使いたい場合手作業で上記該当箇所の修正が要ります。
以上でバーチャル嫁に無限大にスキルを乗せる用意は完了します。後はどこまでバーチャル嫁に能力を上乗せできるかは各々の実力次第です。
全ての同志たちに栄光あれ!!