超マイナーなプログラム言語【LSL】をChatGPT・BingChatAI・GoogleBardの三社は書けるのか… |
こんにちは、ウラカタです。
ChatGPTやBingAI・GoogleBardなど、チャット(文字の会話)を通して様々な知識の吸収や遊びができるのは面白いですね。
今回の記事を書くにあたって、私はまず、ChatGPTに【HTMLを用いて、日本の色(和色)を使用したグラデーションのテキストラインを作ってください。 メルマガやブログで使用できるサイズでお願いします。HEADは使用できません。】とプロンプト(指示┃命令)をおくりました。
そして以下のコードが出力されました。
<!DOCTYPE html>
<html>
<body>
<div style="background: linear-gradient(to right, #d53e4f, #f9c90e, #008000); -webkit-background-clip: text; -webkit-text-fill-color: transparent; font-size: 48px; font-weight: bold; text-align: center; width: 600px; height: 80px;">
グラデーションテキスト
</div>
</body>
</html>
これをHTMLで表示させるとこうなります。
今回のルール
【プロンプトは同じものを使用する事】・【SecondLife内で実際に確認する事】・【やり直しは3回まで】の3点になります。
やり直しというのは、ChatAIはチャットを送信する度に返答が変わりがちなので、伝えたい内容をうまく認識してくれなかった場合に、同じ文言を3回まで送信できるという条件にしました。
最初にコレやって次にコレやってって全部を書いていくと、無駄に長くなってしまうので最終的に出力された物を記載していきます。
発注するLSLのプロンプトについて
今回ChatAIに書いてもらうスクリプトは、ダイヤログとリンクを使用したLSLで、内容をステップ別に分けると以下になります。
- オブジェクトAをタッチする
- ダイヤログが出る
- ダイヤログから色を選ぶ
- オブジェクトBの色が変わる
ダイヤログの設定を難しく感じたりめんどくさく感じる人も多いのですが、これが出来ると製作の幅が広がりますので、私としてはこの情報がなんらかの役に立てれば嬉しいです。
以下の文言をそれぞれ三社のChatAIに投げます。
**************************
これは”LSL”を用いたスクリプトの作成依頼です。
SecondLife内で二つのオブジェクトを用意し、それぞれをリンクさせます。
オブジェクトAを親として、オブジェクトBを子とします。
オブジェクトAをタッチすると、ダイヤログが現れ、ダイヤログの中には、【Red Yellow Green】の三つの色の名前が記載されています。
ダイヤログから各色を選ぶと、オブジェクトBのみ選んだ色に変更されるスクリプトを書いてください。
**************************
それでは、張り切って書いてもらいましょう!
ChatGPT(Free版)の場合
// オブジェクトAに貼り付けるスクリプト
integer dialogChannel = 42; // ダイアログのチャネル番号
key childID; // 子オブジェクトBのID// オブジェクトBの色を変更する関数
void changeColor(string color)
{
vector newColor;
if (color == "Red")
{
newColor = <1.0, 0.0, 0.0>; // 赤
}
else if (color == "Yellow")
{
newColor = <1.0, 1.0, 0.0>; // 黄
}
else if (color == "Green")
{
newColor = <0.0, 1.0, 0.0>; // 緑
}
else
{
llSay(dialogChannel, "無効な色が選択されました。");
return;
}
// 子オブジェクトBの色を変更
llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_COLOR, ALL_SIDES, newColor, 1.0]);
llSay(dialogChannel, color + "色に変更されました。");
}// ダイアログを表示する関数
void showDialog()
{
string dialogText = "【Red Yellow Green】の中から色を選んでください。";
llDialog(llDetectedKey(0), dialogText, ["Red", "Yellow", "Green"], dialogChannel);
}default
{
state_entry()
{
// 子オブジェクトBのIDを取得
childID = llGetLinkKey(1);
}
touch_start(integer total_number)
{
// ダイアログを表示
showDialog();
}
link_message(integer sender_num, integer num, string str, key id)
{
if (num == dialogChannel)
{
// ダイアログのチャネル番号と一致する場合、選択された色に変更
changeColor(str);
}
}
}
🧔『それっぽいけど動かなさそう』
実行結果
構文エラーが発生しました。
void changeColor(string color)とvoid showDialog()のVoidを外せばエラーは解除されますが、しかし、子プリムの色は変わりません。
※私は直しませんが、ChatGPTに直させたい場合は、このコードでは動かないとGPTに伝えるとリアクションが返ってきます。最終的にコードが正常に動くケースもあります。
BingAIの場合
// オブジェクトAのスクリプト
// ダイヤログの選択肢
list colors = ["Red", "Yellow", "Green"];default
{
// オブジェクトがタッチされたときのイベント
touch_start(integer num_detected)
{
// タッチした人のキーを取得
key toucher = llDetectedKey(0);
// タッチした人にダイヤログを表示
llDialog(toucher, "Choose a color for object B.", colors, 0);
// ダイヤログからの応答を受け取るためのリスナーを登録
llListen(0, "", toucher, "");
}
// ダイヤログからの応答を受け取ったときのイベント
listen(integer channel, string name, key id, string message)
{
// 応答した色に応じてオブジェクトBの色を変更するメッセージを送信
if (message == "Red")
{
llMessageLinked(LINK_SET, 0, "red", NULL_KEY);
}
else if (message == "Yellow")
{
llMessageLinked(LINK_SET, 0, "yellow", NULL_KEY);
}
else if (message == "Green")
{
llMessageLinked(LINK_SET, 0, "green", NULL_KEY);
}
}
}// オブジェクトBのスクリプト
default
{
// オブジェクトAからのメッセージを受け取ったときのイベント
link_message(integer sender_num, integer num, string str, key id)
{
// メッセージに応じて色を変更
if (str == "red")
{
llSetColor(<1.0, 0.0, 0.0>, ALL_SIDES);
}
else if (str == "yellow")
{
llSetColor(<1.0, 1.0, 0.0>, ALL_SIDES);
}
else if (str == "green")
{
llSetColor(<0.0, 1.0, 0.0>, ALL_SIDES);
}
}
}
🧔『スクリプトが2枚必要になってしまった』
実行結果
ダイヤログから各色を選ぶと、それぞれの色に変わりました。しかし、こんなものに2枚もスクリプトを使うのはバカバカしいので、ChatAIに1枚にまとめてもらうように追加の支持をするのが必要です。
もうちょっと複雑なスプリプトの指示もできそうです。
GoogleBardの場合
// オブジェクトAを親として、オブジェクトBを子にする
parent = get_parent();
child = get_child(0);// オブジェクトAをタッチすると、ダイヤログが現れる
touch_start(integer:num, vector:vec, integer:face) {
show_dialog("Red", "Yellow", "Green");
}// ダイヤログから色を選択すると、オブジェクトBの色が変更される
dialog_result(string:str) {
if (str == "Red") {
child.set_color(1.0, 0.0, 0.0);
} else if (str == "Yellow") {
child.set_color(1.0, 1.0, 0.0);
} else if (str == "Green") {
child.set_color(0.0, 1.0, 0.0);
}
}
🧔『短いけど、大丈夫なのか?』
実行結果
私はプログラム自体ほぼ知らないので、これが何かはわからないけど、LSLがこれだったらもっと簡単に面白いスクリプトを書けると思うので、リンデンさんはLSLをコレにしてください。但し、今から勉強する気はないので、ChatAIがもっと上手にコードを出力してくれたらいいなぁと思います。
まとめ
- BingChatAIは一応出力してくれる。
- ChatAIにLSLを依頼する場合、チャットを重ねて訂正・修正させる必要がある。
- 久しぶりにSLに入ったらPCが壊れそうになったのでグラボの新調が必要ぽい。
- 今回の記事のSSに出て来たアイテムはすべて自作のものです。
こちらの記事もオススメです