TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

Unityで将棋アプリの開発

先日試していたUnity Barracudaでのdlshogiのモデルを使用した探索が、Androidでもそこそこの強さになりそうなので、Android上でGUIで動かせるようにしたいと思っている。

接待dlshogiの機能を実装して、将棋の練習に使えるアプリにしたい。
また、1手に数秒使えば、R3000以上にできそうなので、人間には十分な強さになると思う。

ディープラーニング系の将棋AIは、探索ノード数を減らすと、弱くしつつ不自然な手を指さないという特徴がある。
従来型ではできなかったことなので、既にある将棋アプリとの差別化になればよいと考えている。


ということで、まずはUnityで将棋のGUIの実装はじめた。

Unityと1日中格闘しつつ、ようやくマウス(タップ)操作で合法手を指して、盤面を進められるようになった。
AIとの対局は未実装。

f:id:TadaoYamaoka:20220223193116p:plain


以下に、Unityで苦労した点をメモしておく(個人用メモ)。

解像度によって見た目が変わらないようにする

こちらの情報を参考に、カメラのSizeを動的に調整するようにした。
画面のサイズ(CameraのorthographicSize)をアスペクト比に合わせて自動で調整する【Unity】 - (:3[kanのメモ帳]

日本語テキストの表示

テキストの表示には、TextMeshProを使用したが、デフォルトで日本語のフォントが入っていない。
こちらの情報を参考に、Noto Sans JPを導入した。
【Unity】TextMeshProで日本語を表示する方法 | 怠惰な日々にさよならを

Font Asset Creatorの設定は、何度か調整して、以下の設定でうまくいった。
f:id:TadaoYamaoka:20220223193736p:plain

UIの解像度とゲームの解像度を合わせる

UIの座標は、デフォルトでピクセルで計算されるため、ゲーム画面上の座標を使用して任意の位置に文字を表示できない。
CanvasのRenderModeを「World Space」に変更することで、ゲーム画面の座標が使えるようになる。

クリック(タップ)の座標をゲームの座標に変換する

Input.mousePositionで取得できる座標は、端末のピクセル単位のため、ゲーム画面上の駒を選択するにはゲームの座標に変換が必要になる。
「Camera.main.ScreenToWorldPoint()」を使うとゲームの座標に変換できる。
参考:How to convert the mouse position to world space in Unity (2D + 3D) - Game Dev Beginner