巷では、ChatGPTを使って、いろんな事が行われている。
プログラマーの仕事が無くなるなどと騒がれているが、まずはこういったAIサービスをうまく活用する方向にシフトすると思われるので、
未来を想像して、ChatGPTをどのように活用できるのか、少し試してみた。
サービス(ゲーム)を作ることを想定して、下記のような簡易的な作業指示を提示した。
▼機能の目的 〇あなたというAIに、どのような指示を出せば、どの程度のアウトプットを頂けるのかの実験を目的としています 〇その為、簡易的なインプットと画面遷移のみを目的としている機能です ▼構成要素 〇画面 ・Title画面 ・MenuSelect画面 ・Battle画面 ・Option画面 ▼要素の説明 〇Title画面 ・PushStartButtonが表示される ・PushStartButtonを押下すると、MenuSelect画面へ遷移する 〇MenuSelect画面 ・BattleButtonが表示される ・OptionButtonが表示される ・BattleButtonを押下すると、Battle画面へ遷移する ・OptionButtonを押下すると、Option画面へ遷移する 〇Battle画面 ・Battle文字列が表示される ・BackButtonが表示される ・BackButtonを押下すると、MenuSelect画面へ遷移する 〇Option画面 ・SeToggleが表示される ・SeSliderが表示される ・BgmToggleが表示される ・BgmSliderが表示される ・BackButtonが表示される ・SeToggleは、Onの状態にする ・SeSliderは、50%の状態にする ・BgmToggleは、Offの状態にする ・BgmSliderは、75%の状態にする ・BackButtonを押下すると、MenuSelect画面へ遷移する ▼レイアウトや外観について シンプルな内容で良いので、UnityのHierarchy上のGameObject配置のサンプルを提示して欲しい。 この内容で、シーケンス図、および、UnityのC#スクリプトを出力をお願いいたします。
▼得られたアウトプット(最終成果物だけ抜粋)
〇プログラム
using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class MenuController : MonoBehaviour { [SerializeField] private GameObject titlePanel; [SerializeField] private GameObject menuSelectPanel; [SerializeField] private GameObject battlePanel; [SerializeField] private GameObject optionPanel; [SerializeField] private Button startButton; [SerializeField] private Button battleButton; [SerializeField] private Button optionButton; [SerializeField] private Button backButton; [SerializeField] private Toggle seToggle; [SerializeField] private Slider seSlider; [SerializeField] private Toggle bgmToggle; [SerializeField] private Slider bgmSlider; private void Start() { // イベントリスナーを設定 startButton.onClick.AddListener(OnStartButtonClick); battleButton.onClick.AddListener(OnBattleButtonClick); optionButton.onClick.AddListener(OnOptionButtonClick); backButton.onClick.AddListener(OnBackButtonClick); // シーン起動時に最初に表示されるパネルを設定 titlePanel.SetActive(true); menuSelectPanel.SetActive(false); battlePanel.SetActive(false); optionPanel.SetActive(false); // オプション画面の初期状態を設定 seToggle.isOn = true; seSlider.value = 0.5f; bgmToggle.isOn = false; bgmSlider.value = 0.75f; } private void OnStartButtonClick() { // Startボタンを押下した時の処理 titlePanel.SetActive(false); menuSelectPanel.SetActive(true); battlePanel.SetActive(false); optionPanel.SetActive(false); } private void OnBattleButtonClick() { // Battleボタンを押下した時の処理 titlePanel.SetActive(false); menuSelectPanel.SetActive(false); battlePanel.SetActive(true); optionPanel.SetActive(false); } private void OnOptionButtonClick() { // Optionボタンを押下した時の処理 titlePanel.SetActive(false); menuSelectPanel.SetActive(false); battlePanel.SetActive(false); optionPanel.SetActive(true); } private void OnBackButtonClick() { // Backボタンを押下した時の処理 titlePanel.SetActive(false); menuSelectPanel.SetActive(true); battlePanel.SetActive(false); optionPanel.SetActive(false); } }
・ヒエラルキ構造
- TitleCanvas - TitlePanel - PushStartButton - MenuSelectCanvas - MenuSelectPanel - BattleButton - OptionButton - BattleCanvas - BattlePanel - BattleText - BackButton - OptionCanvas - OptionPanel - SeToggle - SeSlider - BgmToggle - BgmSlider - BackButton
▼ヒエラルキ構造を生成するツールの作成も依頼してみた結果
using UnityEditor; using UnityEngine; using UnityEngine.UI; public class GameObjectCreator : MonoBehaviour { [MenuItem("MyTools/CreateGameObjects")] static void CreateGameObjects() { // ゲームオブジェクトの親オブジェクトを作成 GameObject parentObject = new GameObject("GameObjects"); // ゲームオブジェクトを作成し、親オブジェクトの子オブジェクトにする GameObject titleCanvas = new GameObject("TitleCanvas"); titleCanvas.transform.SetParent(parentObject.transform); GameObject titlePanel = new GameObject("TitlePanel"); titlePanel.transform.SetParent(titleCanvas.transform); GameObject pushStartButton = new GameObject("PushStartButton", typeof(Button)); pushStartButton.transform.SetParent(titlePanel.transform); GameObject menuSelectCanvas = new GameObject("MenuSelectCanvas"); menuSelectCanvas.transform.SetParent(parentObject.transform); GameObject menuSelectPanel = new GameObject("MenuSelectPanel"); menuSelectPanel.transform.SetParent(menuSelectCanvas.transform); GameObject battleButton = new GameObject("BattleButton", typeof(Button)); battleButton.transform.SetParent(menuSelectPanel.transform); GameObject optionButton = new GameObject("OptionButton", typeof(Button)); optionButton.transform.SetParent(menuSelectPanel.transform); GameObject battleCanvas = new GameObject("BattleCanvas"); battleCanvas.transform.SetParent(parentObject.transform); GameObject battlePanel = new GameObject("BattlePanel"); battlePanel.transform.SetParent(battleCanvas.transform); GameObject battleText = new GameObject("BattleText"); battleText.transform.SetParent(battlePanel.transform); GameObject backButton1 = new GameObject("BackButton", typeof(Button)); backButton1.transform.SetParent(battlePanel.transform); GameObject optionCanvas = new GameObject("OptionCanvas"); optionCanvas.transform.SetParent(parentObject.transform); GameObject optionPanel = new GameObject("OptionPanel"); optionPanel.transform.SetParent(optionCanvas.transform); GameObject seToggle = new GameObject("SeToggle", typeof(Toggle)); seToggle.transform.SetParent(optionPanel.transform); GameObject seSlider = new GameObject("SeSlider", typeof(Slider)); seSlider.transform.SetParent(optionPanel.transform); GameObject bgmToggle = new GameObject("BgmToggle", typeof(Toggle)); bgmToggle.transform.SetParent(optionPanel.transform); GameObject bgmSlider = new GameObject("BgmSlider", typeof(Slider)); bgmSlider.transform.SetParent(optionPanel.transform); GameObject backButton2 = new GameObject("BackButton", typeof(Button)); backButton2.transform.SetParent(optionPanel.transform); // ゲームオブジェクトに必要なコンポーネントを追加する // (省略) Debug.Log("GameObjects created."); } }
実行結果
この状態では、タダオブジェクトを並べただけなので、UI機能を持ったオブジェクトが配置されない。
その為、UI機能を持ったオブジェクト配置も出来ないか試してみたが、中々難しく、結果出来なかった。
その為、各オブジェクトをUI機能を持つオブジェクトに差し替える作業は、手作業で行って、ゲーム機能の方に紐づけて実行した。
そして、意図した動作を行った。
いろいろと試した事が他にもあったり、試したい事があったり、このAIを用いた筆者の考えなどが結構出てきているので、
おいおい、記事化していく予定。