2020年 6月

 JoyKeyMapper v1.0.1 をリリースした / magicien 

JoyKeyMapperをアップデートしました。

修正内容は、
・一部のアプリで補助キーが効かない問題を修正
・App Storeの日本語対応
です。

キーの押下イベントを送信する時に、どの補助キーが押されているかのフラグを一緒に引数として渡しているのですが、Blender等の一部アプリでは、そのフラグを見ていないようで、補助キーの押下イベントを別途先に送っておく必要があるようです。例えば、Command+Zで取り消しするキー割り当てをしていた場合、

修正前:Zキー押下イベント+Commandキーフラグ
修正後:Commandキー押下イベント、Zキー押下イベント+Commandキーフラグ

のようになります。ボタンを離した時の処理も同様。
実際に使ってもらうと、色々と改善点が見つかりますね。今後も少しずつ改善していきたいです。

2020/06/17(Wed) 19:31:02

 Mac の Unreal Engine 4.25.1 でMMDモデル・モーションを一発で読み込む / magicien 

MMDモデル・モーションを読み込むUE4用プラグイン「IM4U」をMacに対応させた。
プラグインのダウンロードはここから。詳細は続きに。

(モデル:ロボ子さん(© 2019 cover corp.)、モーション:あざとかわいいターン

オリジナルのIM4Uは既に開発停止してしまっているが、UE4.24向けにアップデートした方がいたので(tekifuta/IM4U)、これをMac UE4.25.1でビルドできるように修正した。(Mac UE 4.24 以前では動かないと思う)

インストール方法

今のところバイナリは配布していないので、プロジェクト毎にインストールする必要がある。

1. UE4.25.1のプロジェクトを作成する。
2. 作成したプロジェクトのパスに Plugins ディレクトリを作成する。(自分の環境だと、/Users/ユーザ名/Documents/Unreal Projects/プロジェクト名/Plugins)
3. Plugins ディレクトリの下に IM4U のGithubリポジトリを丸ごとダウンロードする。
("git clone https://github.com/magicien/IM4U.git" コマンドか、Githubのページの "Clone or download" > "Download ZIP" でダウンロードしたZIPを展開する)
4. UEのプロジェクトを開き直すと、IM4Uをビルドするか聞かれるので、ビルドする。
5. あとは他のモデル・モーションファイルと同様にpmd/pmx/vmdファイルが読み込める。


以下はまだ対応できていないもの。後で対応するかもしれない。
・ルートボーンが無い(複数ある)PMDモデル対応
・モーション読み込み時にIKを適用する(UEにもIKの機能があるが、モーション自体にIK計算後のボーン位置を焼き込んだ方が良いだろう)
・物理演算対応(剛体だけだっけ?)
・英語対応(UI、コード中のコメント)
・リファクタリング

英語対応だけしておけば、残りは誰かが勝手にやってくれるかもしれない。

2020/06/15(Mon) 00:25:57

 Epic Online Services のAccount IDからProduct User IDを取得する / magicien 

Epic Online Services のSDKでフレンドのプレゼンスを取得・監視する」の続き。

EOSでP2P通信するために、自分と相手のProduct User IDを指定する必要がある。ログイン・フレンド検索で使うIDは、Epic Account IDなので、Epic Account IDに紐づくProduct User IDを別途取得しないといけない。

よくよく調べると、このアカウント周りの処理は、やれることが多い分、処理内容もかなり複雑で、まだ理解しきれていない部分が多い。ライブラリ側でもう少し複雑さを隠蔽してくれてもいいのに。

今回は、一番簡単であろう、外部アカウントIDとして Epic Games を使った場合の流れについて。


まず、Epic Account ID と、Product User ID の関係を図にすると、次のようになる、はず。

フレンドはEpic Account IDで管理されているが、P2P通信はゲームに紐づいたProduct User IDを指定する。そのため、フレンドとP2P通信をするには、Epic Account ID から Product User ID を取得しなければならない。

Epic Account ID

EpicのアカウントのIDは、Epic Gamesでユーザ登録すれば発行される。Epic Account IDは、ユーザに紐づくので、基本的に一人一つだけ割り当てられることになる。

Epic Account IDとExternal IDの関係

実は、Epic Gamesでユーザ登録しなくても、他のアカウント管理システムに紐づいて Epic Account ID の発行ができる。Apple、Nintendo、PSN、...で認証されたユーザのIDに紐付けて、Epic Account IDが発行される。外部アカウントのユーザID一つに紐づけられるEpic Account IDは一つだけ。逆に、一つの Epic Account ID を、複数の外部アカウントに紐付ける事はできる。

Organization User ID?

ドキュメントによると、Organization User IDなるものがあるらしい。が、SDK上にはそれらしいものが見当たらない。謎。
実際は、External IDからProduct User IDに紐づいているように思える。

External IDとProduct User IDの関係

Product User IDは、ゲーム毎に発行されるユーザID。External ID一つにつき、Product User IDが一つ紐づく。複数のExternal IDで一つのProduct User IDが共有できる。

※PSのIDとゲームA用のProduct User ID(Product User A1)が既に紐づいている場合は、同じゲーム内で別のProduct User ID(Product User A2)に紐づけることはできない。

ユーザ、フレンドのEpic Account IDからProduct User IDを取得する


プレイヤー(Local User)のEpic Account IDは、ログイン時に取得できる。
さらに、Account IDからアクセストークンを取得、EOS_Connect_Loginにアクセストークンと外部アカウント(今回はEpic Games)を指定することで、プレイヤーのProduct User IDが取得できる。

フレンドのEpic Account IDは、EOS_Friends_QueryFriends のフレンド検索結果から得られる。この Epic Account ID を、外部アカウントのIDとして使う。EOS_Connect_QueryExternalAccountMappings に フレンドの Epic Account ID と、ユーザの Product User ID を渡して、フレンドの Product ID を取得する。
EOS_Connect_QueryExternalAccountMappings には、複数のフレンドの外部アカウントIDを渡せるので、一回のクエリでProduct User IDをまとめて取得できる。


文章にしようとすると、かなり複雑になってしまう。本当は、プレイヤーのProduct User IDが無い場合に、EOS_Connect_CreateUser でIDを作らないといけなかったり、既存のProduct User IDに外部アカウントを関連づけるために EOS_Connect_LinkAccount を呼んだりする場合があって、より複雑になる。(公式ドキュメント参照)

今回はここまで。

2020/06/06(Sat) 17:37:38

 JoyKeyMapper がフランス語で紹介されていた / magicien 

先日公開した JoyKeyMapper がフランス語で紹介されていました。ありがとうございます!
JoyKeyMapper Mac – Manettes de Jeu en Souris et Clavier (gratuit)


Google先生に頼りながら読んだ感じだと、ちゃんと使ってレビューしてくれたみたいで嬉しいです。Switchの発売から3年以上経って、今さらツールを作っても微妙かな、と思っていたのですが、過去に作られたツールは最新のOSで動かなかったりするようで、後発には後発のメリットがあるようです。

2020/06/01(Mon) 01:17:37