第1回のUnityの動作確認で作成したプロジェクト MyFirstProject をChatGPTで改造する
シーン(Scene)の変更内容
マウスクリックで押せるボタンを配置
ボタンを押すと 楽しそうな 効果音を出す
効果音はスクリプトで合成音を生成(シンセサイズ)する。音源ファイルは使用しない。
ボタンを押すと ボタンが振動(揺れ動く)するアニメーションを付ける
シーン設定の自動化
Sceneエディターを自動操作してボタンやスクリプトを自動設定するコードを生成する
ChatGPT4にUnityで動作するC#スクリプトを作成してもらいました(2024.9)。
プロンプトの指示とChatGPTの回答
https://chat.openai.com/share/980fdb85-81f6-4caf-a098-109fcb3a2315
リンク先のコードをUnityで動かす手順を動画にしました。動画を参考にしてUnityプロジェクト【MyFirstProject】を編集してChatGPT4のコードを動かしてみましょう。
作業メモ
Unityのバージョン 6 (6000.3.22f1)
Unityのプロジェクトの保存先
T:ドライブ Unityフォルダの Game3125777 など
プロジェクト名 MyFirstProject
Unityのメニュー Edit -> Preferences から以下の画像のようにVisual Studio 2022を外部ツールとして選択
External Script EditorコードエディタをVisual Studio 2022 に切り替える
ProjectにC#スクリプトファイルを新規追加
Project 内で【右クリック】 → Create → Scripting → MonoBehaviour Script
スクリプトのファイル名を
UICreator
に変更する
UICreator C#スクリプトのアイコンをダブルクリックして Visual Studio を起動する
サインインはしない
「後でアカウントをスキップして追加します。」を選択する。アカウントの作成は不要。
Unityとの通信を許可
ChatGPT4の作成した1つ目のコード(メインのコード)をコピペする
参考:以下は 2024.9に生成したコードでバグを含んでいる。同様の指示で2026のcodexで生成するとバグは含まれなくなった。
(1/2)スクリプト UICreator
同様にして
UICreatorInitializer
C#スクリプトをProjectに追加する
ChatGPT4の作成した2つ目のコード(スクリプト設定支援用)をコピペする
(2/2)スクリプト UICreatorInitializer
UnityのPlayボタンを押してシーンを再生
バグの確認
エディターの ステータスバー と コンソール(Console)の表示を確認する
Consoleにエラーが表示されている
Gameウインドウでは
ボタンButton の テキストtext
が表示されていない不具合がある
Input System package 関連のエラー InvalidOperationException 不正な操作例外 が 大量に発生し続ける(エラー発生が止まらない)
参考:
プロジェクトのバージョンがUnity2022など古い場合、入力処理が古いシステム(Input Manager)でありChatGPTの生成したこのコードは動作する。
Unity6では新システム InputSystem に入力処理が切り替わっているのでエラーになる。
Console で Collapse を押すとエラーを分類整理して表示できる。大量のエラーが発生したときに利用するとよい。
エラー内容を確認すると
Fontフォント関連のエラー Arial.ttf は利用不可、LegacyRuntime.ttf に変更する提案
Inputクラスを利用するにはUniyの入力処理(Input handling)を切替える必要がある マウスの座標取得に関して
同上 ボタン(画面上)のクリックに関して
の3種類が発生していることが分かる
Fontに関するバグの修正(1/2)
スクリプト UICreator
43行目
を編集する
Startメソッドの以下の行のフォントを赤文字のように変更する
変更前の"Arial.ttf"はWindowsのフォントなのでUnityでは著作権の関係で利用できない
buttonText.font = Resources.GetBuiltinResource<Font>("LegacyRuntime.ttf");
UnityのPlayボタンを押してシーンを再生
バグの確認
ボタンを押しても反応しない
シーン再生を停止して、エディターの ステータスバー と コンソール(Console)の表示を確認する
Uniyの入力処理(Input handling)関係のエラーがまだ未対応のままで残っている
Input System系のバグ修正(2/2)
Scene に EventSystem を追加してUI操作などのイベント処理をプロジェクトの標準の Input System で行う様に修正する
EventSystemが追加されたシーンの様子
参考:
第1回目の Unity環境設定と動作確認 の作業で新規作成した Scene0 には Directional Light もない。
プロジェクトの新規作成で自動生成される SampleScene と見比べてみよう。
UnityのPlayボタンを押してシーンを再生
モニターのボリュームとWindowsのボリュームを調整して、ボタンを押したときの効果音の再生まで確認する
バグの確認
エラーはなくなったが、Warning 警告 が2つ残っている。これはEvent SystemオブジェクトがC# スクリプト側でも生成追加するようになっていて、上で手動で追加したものと重複したためである。
スクリプト UICreator の23,24,25行目をコメントアウトして対応する。
UnityエディタのAssetsにある「UICreator.cs」スクリプトをダブルクリックしてVisual Studioで編集する。
以下の画像を参考にして、文字列 "Click Me!" を自分で考えたメッセージ※に書き換えて再生(プレイ)する。
※英文フォントで表示するので日本語入力はOFFでメッセージを記述する必要がある。
例)
buttonText.text = "START!!!";
他にも変更できそうなコードが有れば変更を試す。
例)
// メンバー変数
//アニメーション時間
private float animationDuration = 1.5f;
// Startメソッド
// ボタンや文字の色、サイズの変更
buttonImage.color = Color.red;
buttonText.color = Color.green;
btnTransform.sizeDelta = new Vector2(150*2, 50*2);
buttonText.rectTransform.sizeDelta = new Vector2(150*2, 50*2);
// この行はそのままStartメソッドに追加する。文字のフォントサイズの指定
buttonText.fontSize = 80;
// Updateメソッド
// 3倍のスピードで5倍大きく揺らす
float rotationAngle = Mathf.Sin(percentage * Mathf.PI * 4 * 3) * 10f;
createdButton.transform.localRotation = Quaternion.Euler(0, 0, rotationAngle*5);
// PlayBeepSoundメソッド
// 波形の変更。周波数を2倍(+1オクタープ)。金属音に加工。ボリュームを素早く絞る(2回重ねて絞る)
float frequency = 440.0f*2;
samples[i] = Mathf.Abs(s) * volume * volume;
提出方法
Unityの画面をスクリーンショットしてWebclassの Unity課題1 にアップロードする。
提出〆切
採点するまで(次回講義日以降~期末課題〆切までに採点する)。