初心者ガイド設計 (1)

初心者向けガイドデザイン


序文

すべてのゲーム デザインにとって、初心者向けガイダンスは、プレーヤーが事前にゲームプレイをすばやく理解できるように導くためにすでに必要なモジュールですが、ガイダンスにはあまりにも多くの機能モジュールが含まれているため、そのコードは他のモジュールと高度に結合されており、効率的な一連の機能を設計する方法、独立した初心者ガイドは、クライアント プログラムが習得する必要があるスキルです。

この記事では、より多くのフロントエンドを支援し、アイデアを広げることを目的として、U3D を開発プラットフォームとして使用してガイド フレームワークを設計します。


1. 初心者ガイドの保存形式

一般的な構成情報は通常 Excel に保存されますが、一部のネストされた形式は保存できない、または保存や読み取りに不便なため、保存には json を使用します。

2. 初心者ガイド収納構造

1.初心者ガイドの主な構成

コードは次のとおりです(例)。

public class MainGuideData
{
    
    
    // 引导的名称
    public string GuideName; 
    // 引导的id;
    public int GuideId;
    // 是否强制引导
    public int ForceGuide;
	// 前置引导id;
	public int PreId;
	// 后置引导id;
	public int PostId;
	// 引导优先级
	public int Priority;
	// 中断后重新触发的子进度索引;
	public int RestartSubIndex;
	// 保存进度的子进度索引;
	public int SaveSubIndex;
	// 存出的子引导任务;
	public List<SubGuideData> SubGuideList;
}

各ガイドは通常、一連のサブガイドで構成されており、たとえば、プレーヤーが装備品を収集するようにガイドされている場合にのみ、各ガイド間に特定の前後関係が存在する場合があります。そうして初めて、プレイヤーが装備を強化またはアップグレードするためのガイダンスが表示されます。

  • ForceGuide は強制ガイドかどうかを表し、画面全体がガイドマスクでブロックされ、クリックまたはドラッグする必要があるものだけが強調表示され、プレイヤーは強調表示された位置でのみ操作できます。
  • PreId と PostId の目的は、すべてのガイドを複数のツリーに結び付けることであり、各ツリーは一連の独立したガイドを表し、各ツリーのリーフ ノードはガイドのシーケンスを表します。
  • 優先順位は同時にトリガーするガイドが複数ある場合に使用されますが、プレイヤーの場合は優先順位に応じて 1 つずつしかトリガーできないため、このフィールドは現時点で必要です。
  • RestartSubIndex、中断後に再トリガーされるブート ステップ。一部の非必須ガイドでは、プレーヤーは別のボタンまたは中央のエントリを選択し、ガイドのために現在のインターフェイスを離れる場合があります。1 つのステップで実行されます。
  • SaveSubIndex サブガイダンスがこのステップまで実行されるとき、後でブート タスクがある可能性がありますが、ブートが完了したことを示すために保存する必要があります。この時点でブートが中断されるか、プレーヤーがプロセスを強制終了した場合、再度ログインすると、ブート フラグが完了しており、再度ブートは実行されません。
  • SubGuideList このガイドのすべての特定のサブガイドを表すサブガイド リストと、そのサブガイドには、ダイアログ、強調表示されたボタンなどの特定のパフォーマンスが含まれます。

2. サブブート構造

サブガイダンスは特定のガイダンスであり、ガイダンスには通常、トリガーのタイミング、トリガー条件、およびトリガー後のパフォーマンスが含まれます。例えば、プレイヤーがアップグレードするとき、プレイヤーは指定されたインターフェイスを開き、プレイヤーはアイテムを取得します。トリガーには多くの種類があり、対応するパラメータも異なります。一般的な構造を定義するのは非常に困難です。Dictionary を使用して構成情報を保存し、対応するトリガー条件のパラメーターとして異なるキーと値を使用できます。また、プレイヤーが指定された数に達しているかどうかなど、さまざまな条件もあります
。プレイヤーが持っているかどうか 指定された機器を持っているかどうか、指定されたインターフェイスが現在開いているかどうかなど、多くの特定の条件があります。トリガーのタイミングと同様に、ストレージの構成に辞書を使用することもできます。
トリガー後は、ストレージ構成にも Dictionary を使用します。したがって、パブリックな GuideItemData 構造体を定義します。

public class GuideItemData
{
    
    
	// 具体的Action, Conditon,或者Trigger的类型;
    public string Type;
    // 具体的参数信息;
    public Dictionary<string, string> Params;
}

GuideItemData 構造を使用して、SubGuideData の構造の定義を開始できます。

  • トリガー条件が 1 つ以上存在する可能性があるため、トリガーのタイミングをガイドするには、リストである Triggers フィールドが必要です。

  • いずれかのトリガー条件がトリガーされると、現在のトリガー条件が満たされているかどうかを確認する必要があり、満たされている場合はパフォーマンスが再生されます。これらすべてに条件が必要です。

  • 繰り返しますが、現在のトリガーの後、トリガー条件が満たされ、対応するパフォーマンスを実行する必要があります。パフォーマンスを表示するにはアクションが必要です。通常、これら 3 つのフィールドはほとんどのガイダンス要件を満たすことができます

    最後に、パフォーマンスがある場合、現在のパフォーマンスをいつ終了して次のサブガイダンスに進むのか、現在のサブガイダンスのトリガーを完了するには終了トリガーが必要です。このトリガーのリストを Dones と呼びましょう。

  • 通常、この構造は強制的な誘導のニーズを満たすことができますが、非強制的な誘導タスクの場合、たとえば、戦闘のメイン シーンで現在会話を行っており、プレイヤーはこの時点では会話をクリックせず、クリックします。このとき、現在の起動を中断して、再度 RestartSubIndex から起動させる必要がありますが、現時点で起動を中断するかどうかを判断するには、すべて現在のアクションが必要であることを示す条件が必要です。維持された。これを StayConditions と名付けました。

  • 通常、プレイヤーは Donetrigger を 1 回実行して現在のアクションを終了し、次のサブガイダンスに進みますが、場合によっては Donetrigger を複数回実行する必要がある場合もあります。条件が満たされたことがわかった後、現在のアクションは終了します。例えば、プレイヤーは装備を継続的にアップグレードするように誘導されますが、レベル 5 ではフォローアップの誘導が実行されるため、DoneConditions も必要になります。

  • 場合によっては、Action によって実際のゲームが特定の状態 (ゲームの一時停止など) に変更され、Done が実行されると再び復元されます (ゲームの再開)。このとき、DoneActions も必要です。
    次のようなサブガイド付き構造

public class SubGuideData
{
    
    
	// 引导名称
	public string Name;
	// 引导触发器列表
	public List<GuideItemData> Triggers;
	// 引导触发条件
	public List<GuideItemData> Conditions;
	// 引导结束触发器;
	public List<GuideItemData> Dones;
	// 引导结束条件
	public List<GuideItemData> DoneConditions;
	// 引导Action保持需要的条件;
	public List<GuideItemData> StayConditions;	
	// 引导结束后的动作表现;
	public List<GuideItemData> DoneActions;
}

これらの構造を使用して、ガイドを表す json データを構成できます。
次のガイドの例を参照してください。

{
    
    
    "GuideList":
    [
        {
    
    
            "GuideId":101,
            "GuideName":"出来咋到",
            "PreId":-1,
            "PostId":102,
            "Priority":0,
            "ForceGuide":1,
            "SubGuide":
            [
                {
    
    
                    "Name":"初来咋到-说明文字1",
                    "Triggers":
                    [
                        {
    
    
                            "Type":"EnterScene",
                            "Params":
                            {
    
    
                                "SceneName":"MainScene"
                            }
                        }
                    ],
                    "Conditions":[
                        {
    
    
                            "Type":"PanelVisible",
                            "Params":
                            {
    
    
                                "UIName":"HallPanel"
                            }
                        },
                        {
    
    
                            "Type":"PlayerLevel",
                            "Params":
                            {
    
    
                                "Value":1
                            }
                        }
                    ],
                    "Actions":
                    [
                        {
    
    
                            "Type":"Dialog",
                            "Params":
                            {
    
    
                                "DialogType":"Left",
                                "Content":"欢迎{PlayerName}勇士来到{BornName}",
                                "ShowIntervalTime":0.05
                            }
                        }
                    ],
                    "Dones":
                    [
                        {
    
    
                            "Type":"ButtonClick",
                            "Params":
                            {
    
    
                                "UIName":"GuidePanel",
                                "ButtonName":"dialog"
                            }
                        }
                    ]
                },
                {
    
    
                    "Name":"初来咋到-点击装备",
                    "Triggers":
                    [
                        {
    
    
                            "Type":"Sequence"
                        }
                    ],
                    "Actions":
                    [
                        {
    
    
                            "Type":"ShowButtonAnim",
                            "Params":
                            {
    
    
                                "UIName":"HallPanel",
                                "ButtonName":"BtnEquipment"
                            }
                        }
                    ],
                    "Dones":
                    [
                        {
    
    
                            "Type":"ButtonClick",
                            "Params":
                            {
    
    
                                "UIName":"HallPanel",
                                "ButtonName":"BtnEquipment"
                            }
                        }
                    ]
                }
            ]
        }
    ] 
}

要約する

ブートストラップ設計を行う場合、まず要件に応じて対応するデータ構造を設計し、最後に対応するコーディングを実行する必要があります。

おすすめ

転載: blog.csdn.net/zhush_2005/article/details/125143944