(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発しているVRゲームです!


日本語で指示を出すだけでプログラムを自動生成したり、コードを日本語で解説してくれたりするAIProgrammerはUnityのC#でも使える 【Unity】【AI】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2021.1.23f1


はじめに

巷では絵を描くAIが何かと話題ですが、




実はプログラムを書くAIもあったりします。



今回そのAIの一つであるAIProgrammerをUnityのC#で使ってみようという感じの記事です!



AIProgrammer

まずAIProgrammerの使い方ですが、言語を選択して日本語でプログラムの内容を指示するだけ。

AI Programmer


なお、C#はあってもUnityの項目はないので、Unityのコードを書く際は

「Unity C#で書いてください。」の一文を添えましょう。


例えば以下のような日本語からコードを生成してみると、

Unity C#で書いてください。
プレイヤーが衝突(2D)を検知して、衝突したのが敵だったらHPが減る。 
HPが0になったらプレイヤーは死ぬ。


ちゃんと指示通りのコードが生成されました……!

しかもMonoBehaviourやOnCollisionEnter2DといったUnity固有のクラスやメソッドを使用しています。


ただし、同じ文章でも生成されるコードは結構変わるようです。(同じ場合もある)

死亡処理省力 Unity無関係&メソッド実装全投げ


また「コードを日本語で解説」を選ぶことでプログラムの内容を解説してくれる機能もあります。

例えば「任意の値に最も近い値を取得するLINQの拡張メソッド」のコードを試してみると。

  public static int Nearest(this IEnumerable<int> source, int targetValue){
    if (source.Count() == 0) {
      Debug.LogError($"値が入っていないので、最も近い値を取得出来ません");
      return targetValue;
    }
    
    var min = source.Min(value => Mathf.Abs(value - targetValue));
    
    return source.First(value => Mathf.Abs(value - targetValue) == min);
  }


「引数には、取得したい値(targetValue)が入っています。」がちょっと違うだけで、

ほぼほぼ正確かつ詳しい解説をしてくれました……!



おわりに

記事の例だと結構いい感じに出来ていますが、

ちょっと違うコードを生成したり、複雑(長い?)なコードの生成は難しかったりと、

お絵描きAI同様、現状はこれだけでコードが書けるという程ではありませんでした。


しかし、まだまだ発展途上の分野なので、

いずれは日本語で指示するだけでプログラムが完成するようになるのかもしれません。