データ構造 は、コーダーがデータのセット全体を保存および整理する方法です。Lua では、データ構造はテーブルで作成されます。 テーブル は任意の値を保持できます。
このアイテムでは、 配列 、特定のテーブル入力を使用して、トークンキャラクターを作成する方法について説明します。
テーブル
テーブル はデータタイプで、複数の値を保持できます。他のデータタイプは、単一の値を保持することがありますが、テーブルは固定サイズがあり、複数の異なる値タイプをミックスできます。テーブルを使用すると、プレイヤーのインベントリにアイテムを保存したり、数千のプレイヤー名をリストを作成したりできます。
配列
テーブルには、種類があります。1つは、配列で、値のリストを特定の順序で保存します。配列を作成するには、変数を作成し、{ } で配列を割り増します。以下のコマのように、ブラックスペースを含むセパレートされた値内の値のリストを配列に割り増します:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
トークンキャラクターを作成する
配列を探索するには、クリックすると異なるダイアログが表示される NPC キャラクターを使用します。
このプロジェクトでは、NPC モデルを使用しますが、プロンプト ディテクターを含む一部のスクリプトとダイアログがありません。
In Explorer, import the NPC by right-clicking on ワークスペース > ファイルからインポート and select the downloaded file.
ダイアログアレイをコードする
これらのステップは、NPC がプレイヤーと対話したときに言う異なるフレーズを保存するアレイを使用します。
In the エクスプローラー , go to NPC > ProximityPrompt > ChatManager.
In ChatManager、スクリプトにマークされているように、 空の配列を作成 してダイアログオプションを保存します。
-- チャットダイアログを使用するときにチャットをサイクルするlocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- ここに配列を追加local dialogueArray = {}local function speak()local dialogue = "I've got one thing to say!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)新しく作成された配列の {} 内の空の枠内に、少なくとも 3つのダイアログストリングを入力します。
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
配列インデックスを使用する
各値には、index 番号が割り当てられます。インデックスは、値が存在するオーダーで割り当てられます。最初の値は、インデックス 1 に、2番目は、インデックス 2 に割り当てられます。その後、3 番目は、インデックス 3 に割り当てられます。
他のコーディング言語、例えば Java は、インデックスを 0 から開始します。
作成されたアレイには、"Hi"がインデックス 1 にあり、"Goodbye!"がインデックス 3 にあります。
インデックス | 値 |
---|---|
1 | こんにちは |
2 | 今日は素晴らしい日です! |
3 | さようなら! |
特定のインデックス値を使用する
インデックス値を使用して、NPC に特定のダイアログを割り当てます。特定のインデックスで値を使用するには、アレイの名前の直後にインデックスを追加します。たとえば、dialogueArray[1] です。
変数 dialogue のデフォルトのストリング値をインデックス 2 で置き換えます。
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endNPC をプレイテストし、クリックします。チャットバブルに値が表示されるはずです。コードを変更して、テーブル内の各値をテストしてください。
ダイアログラインを変更する
プレイヤーが NPC とインタラクトすると、NPC は常に同じ行を言います。つまり、NPC に変更するインデックス値を更新するための変数を使用してください。
プレイヤーが NPC と対話するたびに、変数の値を 1 増やして、次のダイアログを表示します。
現在のインデックスを追跡するには、新しい変数を追加します dialogueIndex。変数を 1 に設定して、配列の開始時点で開始します。
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local dialogueIndex = 1In speak() で、 replace インデックス番号を、新しく作成した変数で dialogueArray[2] に置き換えます。
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)end機能の底に、DIALOGIndex を追加します。次回 speak() が呼び出されると、ダイアログが次のストリン文字列を表示します。
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endNPC をプレイテストし、アレイから各ダイアログストリングを見ることができます。
スクリプトがアレイの終わりに到達すると、 エラー が発生します。
次のセクションで修正し、ダイアログが最後の文字列を表示した後に再起動します。
配列のサイズ
配列のサイズを使用して、必要なインデックスを 1 にリセットするときを知ることができます。配列の名前の前に空を使用せずに # を入力して、配列のサイズを見つけることができます。
たとえば: #dialogueArray
配列のサイズを変数の現在の値に対してチェックして、開始時に戻る準備ができたかどうかを知ります。
ダイアログの再起動
配列サイズを使用して、最初のダイアログに戻る時間を確認します。
if 文を追加し、dialogueIndex が#dialogueArrayの合計サイズであるかどうかをチェックします。如果、そうである場合は、dialogueIndex を 1 に設定します。
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endIf dialogueIndex が最終了にありません、it should still add 1 to dialogueIndex. Move dialogueIndex under another statement。
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1elsedialogueIndex += 1endendプレイして、ダイアログをサイクルして再起動できるかどうかを確認します。
概要
データ構造は、データのセットを保存する方法です。Lua は、テーブルを使用してデータ構造を作成します。配列は、インデックスリストの順序を保持するタイプのテーブルです。配列内の各値は、インデックス 1 から始まります。
このスクリプトは、NPC の非プレイ可能なダイアログラインの可能性のあるリストを作成するために配列を使用しました。
スクリプト完了
-- チャットダイアログを使用するときにチャットをサイクルする
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- ここに配列を追加
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
local dialogueIndex = 1
local function speak()
local dialogue = dialogueArray[dialogueIndex]
Chat:Chat(head, dialogue)
if dialogueIndex == #dialogueArray then
dialogueIndex = 1
else
dialogueIndex += 1
end
end
prompt.Triggered:Connect(speak)
トラブルシューティングのヒント
キャラクターがダイアログの配列を通過しない場合は、次のトラブルシューティングヒントを試してください。
- Check the if statement that dialogueIndex is set back to 1. In the else statement, check that dialogueIndex has 1 added to itself.
- 配列のサイズを取得するときは、#dialogueArray の後にスペースがあることを確認してください。
オプションチャレンジ
以下のオプションチャレンジの 1 つを試してください。
- スクリプトをコードすると、NPC のダイアログがアレイを通じて後ろ向きになります。ダイアログインデックスは、アレイから開始し、毎回追加する代わりに削減する必要があります。
- ダイアログを連続して表示する代わりに、NPC が随時 Random.new() を使用してランダムなダイアログの行を表示します。サンプルスクリプトは以下に含まれています。
local randomGenerator = Random.new()
-- NPC がクリックされるたびに新しいダイアログを表示します
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end