見出し画像

Talentus Proの使い方(Unity Asset)

Talentusは、スキル/タレントツリーを簡単に作成、管理できるUnityパッケージです。値段はそこそこ高いですが、自分で作成するよりは遥かに効率が良いでしょう。直感的なエディタにより、ツリーの作成が簡単に行えます。
ウィザードでは、デザインに基づいてプレイ可能なUIを直接デザインすることができます。

導入

TalentusはUnity 2018.4 LTSを使って制作されましたが、それよりも新しいバージョンでも動作します。
アセットストアからパッケージをインストールすると、新しいフォルダ「Talent Tree」が作成されます。このフォルダ全体をassetsディレクトリ内の新しい場所に自由に移動できます。ただし、フォルダ構造を崩さないようにし、すべてのサブディレクトリはそのままにしてください。Examplesが不要な場合は、削除することができます。
デフォルトでは、スキル/タレントツリーの保存場所は、/Talentus/Example/Database/に設定されています。
これは、プロジェクトの環境設定(Edit/Preferences/Talentus)で変更できます。。
私の環境では、Draw Grid in Editorを有効してもGridは表示されず、Macの動作が非常に重くなりました。

スクリーンショット 2021-09-19 17.15.05

TalentとSkillツリーのデザイン

ツリーの作成を始めるには、エディターを開く必要があります。「Tool」→「Cygnus Projects」→「Talent Tree Editor」からエディターを開きましょう。

スクリーンショット 2021-09-19 17.18.49

以下のWindowが開きます。

スクリーンショット 2021-09-19 17.19.32

左側の領域はツリーをデザインする実際のワークスペースで、右側の領域はカスタムエディタです。(現在は何も選択されていないので空です)

左側の領域を右クリックすると、「Create Tree」「Load Tree」が表示されます。

Create Treeを選択して、新しいTreeを作成してみましょう。

スクリーンショット 2021-09-19 17.23.25

新しいTreeを作ったら、左側の領域を右クリックして、新しいTalentを追加できます。

スクリーンショット 2021-09-19 17.31.43

スクリーンショット 2021-09-19 17.32.31

プロパティの調整
プロパティを調整したら、ワークスペースに2つ目のスキル/タレントを追加して、プロパティを調整します。
完了したら、2つのタレントを条件で結びつけましょう。
タレント/スキルには、左右(本記事の画像では上下)に丸いボックスがあります。これをコネクターと呼びます。上(左)側の(2)が入力コネクタ、下(右)側の(1)が出力コネクタと呼ばれています。出力コネクタを左クリックして、マウスボタンを押さずに、マウスを2つ目のタレントの 2 つ目の才能の入力コネクタに向かってマウスを動かし、左クリックすると、両方が接続されます。

スクリーンショット 2021-09-19 17.34.57

双方のタレント/スキルを結ぶオレンジ色の線で表示されるコネクションが作成されます。コネクションを削除するには、コネクションが選択されているか、またはハイライトされている状態で、deleteを押します。
キャンバス上の他の場所をクリックすると、描かれた接続が赤く表示されます。

スクリーンショット 2021-09-19 17.36.14

エラーがある時はコネクションが赤くなります。プロパティを調べる必要があります。
赤い線をクリックして接続を選択し、カスタムプロパティインスペクタで確認します。

スクリーンショット 2021-09-19 17.37.05

エクスクラメーションマークは条件構造が見つからなかったことを示しています。警告の上にある「+」ボタンを押して、条件構造を追加します。
接続のプロパティとその使用方法については、後述の「接続のプロパティ」のセクションを参照してください。
準備ができたら、キャンバス内のどこかをクリックして接続の選択を解除すると、線が黒くなって有効な接続が設定されたことを示します。

タレント/スキルのプロパティー

スクリーンショット 2021-09-19 19.04.32

すべてのタレント/スキルには名前が必要です。
タレントのTierは、Tierプロパティで選択できます。Tierを設定する方法は このマニュアルの後の方で説明されています(Tier Managementを参照)。
タレントにイメージと無効イメージを割り当てることができます。
説明を追加することができます。これは、必要に応じてユーザーインターフェイスで後から使用することができます。

各スキルに任意の説明を追加することができます。このフィールドには、いくつかの(スキルを取得するための要件)を保存するために使用できます。
すべての才能/スキルは複数のレベルを持つことができ、各レベルにはコストが必要です(コストとは、アンロックするためのスキルポイントを意味します)。デフォルトでは、タレント/スキルは実際に機能するためには1つのレベルを必要とし、このルールに従わないスキルは、エンジンによって無視されます。レベルを追加するには、「コスト」の下にある「+」ボタンを押します。コストの横にある'x'ボタンを押すと、レベルやコストを削除できます。タレント/スキルのすべてのレベル/コストに小さな説明を追加できます。
各レベルは、説明フィールドを使って説明することもできます。このフィールドには あなたが望むものすべてを含むことができます。
スキルの説明やコスト/レベルの説明をランタイムに変更するには、TalentusAutoEnableRootsのサンプルスクリプトを参照してください。同じロジックで実行時にこれらの値を取得することができます。値を得ることができます。

スクリーンショット 2021-09-19 19.12.42

タレント/スキルノードのインとアウトを接続することで、コネクションを作成します。既存のコネクションを変更するには、単にそれを左クリックし、プロパティは、カスタムエディタペインに表示されます。
コネクションの名前は、コネクションの接続元と接続先のタレントによって自動的に定義されます。
もちろん、必要に応じて名前を変更することができます。コネクション名自体は、エンジンの内部でのみ使用され、UIでは使用されません。コネクションは、必須(デフォルト)またはオプションにすることができます。

なお、Preferencesウィンドウで色を設定することで、接続の種類に応じて色を変えることができます。コネクションには、常に1つ以上の条件が必要です。これらの条件は、スキル/タレントへの接続がいつ有効になるかを指定します。新しい条件を追加するには「+」ボタンを、既存の条件を削除するにはその横にある「x」ボタンを押します。
すべての条件が満たされると、選択できるようになります。
現在、以下の3種類の条件をサポートしています。

Talent has leve「才能にレベルがある」では、相手の才能/スキルに特定のレベルを要求することができます。例えば、「Magic Supreme」はレベル3でなければなりません。
Talent is maxed out「才能が最大である」とは、元の才能のレベルが最大であることを意味します。例えば、「Magic Supreme」のレベルが5であれば、すべてスキルポイントで購入している必要があります。
"Tier is complete "「ティアが完了している」とは、選択された階層に属するすべての才能/スキルが最大化されていることを意味します。この例では、「魔法」を選択しているので、「隠れたスキル」を選択する前に、すべての「魔法」の才能をすべてのレベルで購入していなければなりません。

Tier Management

スクリーンショット 2021-09-19 21.35.50

エディターのツールバーにあるTier Managerアイコンをクリックすると、以下のようなウィンドウが表示されます。

スクリーンショット 2021-09-19 21.35.30

ティアマネージャーでは、1つの同じタレント/スキルツリー内でタレント/スキルを分類することができます。例えば、マジックスキル、ウォリアースキル、マスタースキルがあります。これらのマスタースキルは これらのマスタースキルは、マジックスキルやウォリアースキルがすべてアンロックされている場合にのみアンロックできます。

スクリーンショット 2021-09-19 21.40.05

ボタンをクリックすると、新しいTierを追加することができます。カラーピッカーには、デフォルトでは存在しない色が割り当てられます(最初の8つの階層のみ)。割り当てられた色は、共通のカラーピッカーを使っていつでも変更することができます。割り当てられた色は、共通のカラーピッカーを使っていつでも変更できます。
削除したいTierの横にある「x」ボタンをクリックすると、Tierを削除することができます。あなたが Tierを削除すると、そのTierに属するすべてのスキル/タレントはManagerリストの前のTierに割り当てられます。
例えば、Crafting Tierを削除すると、それに属していたタレントはWarrior 階層に割り当てられます。
あなたが定義したタレント/スキルのプロパティ内でティアは、ティアのドロップダウンリストで利用可能になります。指定されたTierカラーがタレントの周りに描かれ、所属するTierを示します。

UI TEMPLATE

タレント/スキルツリーをランタイムにゲームで使用する前に、少なくともタレントの視覚的表現をプレハブとして必要とします。
「Example/UI」フォルダの中に「TalentUI」というプレハブの例があります。この例では、タレントのエディタ内での外観に似ています。
もちろん、あなたの好きなようにプレハブを設定できます。

スクリーンショット 2021-09-20 0.45.08

このプレハブは、背景と、ラベル、テキスト、2つのボタンなどのサブコンポーネントで構成されています。
2つのボタンは、Exampleのシーンで、タレントを購入したり、元に戻したりできるようになっています。タレントやスキルの購入プロセスは自由にフックできます。エンジン以外のラベルやボタンなどは、すべてプレハブ内で参照されています。Engineフィールドは、ウィザードによって実際のTalentus Engineコンポーネントに割り当てられます。
TalentUI.csファイルのソースを開くと、すべてがエンジンによって管理されているため、特別なことは何も起こっていないことがわかります。このエンジンは、タレントやスキルの実際のステータスを知るために、いつでも参照することができます。これは、購入ボタンを有効にする前でもTalent.IsValidチェックで確認できます。また、実際のスキルの購入はBuyTalentコールによってエンジンが行います。エンジンのAPIについての詳細は、Talentus Engineセクションでご覧いただけます。
独自のUIテンプレートを作成して、あなたのプロジェクトに完全にマッチさせることをお勧めします。ツリー内のすべての ツリーのすべてのタレント/スキルは、ランタイムにこのプレハブで表現されるので、ゲームのビジュアルの重要な部分となります。ゲームのビジュアルに重要な役割を果たします。

ランタイムで動作するようにする

まず、「Empty Example」シーンを開きます。このシーンには、スキルのないデモ用のキャンバスが 用意されています。このキャンバスは、ApplyとRevertのボタンで構成されています。また、talentus engineのゲームオブジェクトが シーンの中にすでにあります。
「Cygnus Projects」メニューから「Talent Tree UI Template」を選択して、UIウィザードを起動します。

スクリーンショット 2021-09-20 0.52.20

画面が表示され、他のオブジェクト(シーンやプロジェクト)への参照を入力する必要があります。
この画面には、「一般設定」、「タレント設定」、「接続設定」の3つのゾーンがあり、拡張または折りたたむことができます。ラベルをクリックするか、拡大/縮小インジケーターをクリックすると、設定の表示/非表示が切り替わります。
デフォルトでは、「一般設定」のみが表示されます。
タレント設定」では、1つのフィールドのみが利用可能で、UIで作成された各タレントUIオブジェクトにデフォルトのMonoBehaviourスクリプトを割り当てることができます。これは、各タレントオブジェクトに手動でスクリプトを割り当てる必要を防ぐために使用できます。スクリプトの例は「TalentExtraScript」というexamplesフォルダにあります。
接続設定」では、割り当て可能なフィールドが多数あり、フィールドの組み合わせによって、接続UI要素がUIにどのように表示されるかが決まります。

カスタムプレハブを使用する場合、タレント/スキルと接続に関する参照は作成されませんが、「Attach connection settings when using prefabs」のチェックボックスにチェックを入れると、生成された各接続オブジェクトに特定のConnectionPropertiesコンポーネントが添付されます。

スクリーンショット 2021-09-20 1.14.50

「Color according to there type」をチェックすると、環境設定で指定したタイプに応じて接続線が着色されます。これを選択しない場合は、デフォルトで以前のようなグレーの色になります。
UI Connection Prefフィールドに接続プレハブを割り当てると、接続線のレンダリングが無効になり、カラーリングの設定が優先されます。このフィールドにUIプレハブを割り当てることができ、接続の始点となるべき位置に配置されます。
タレント設定と同様に、生成された接続UIオブジェクトに追加されるスクリプトを割り当てることができます。プレハブが指定されていなくても、割り当てることができます。

必要に応じて、オプションの接続に特定のプレハブやスクリプトを指定することができますが、「Same settings as Required connections(必須の接続と同じ設定)」をチェックすると、それらは使用されず、必須の接続の動作を継承します。
オプション接続の設定では、「接続のプロパティ」で説明した円形のオプション接続を簡略化するかどうかを選択できます。なお、「Color according to their type」のチェックボックスがオンになっている場合は、これらの接続には特別な色が割り当てられます。

スクリーンショット 2021-09-20 1.22.58

フィールドの割り当て:
Talentus EngineとUIルートはすでにシーンに配置されており、Talent TreeとUI Talent Prefabはプロジェクトビュー内で利用できるはずです。UI Talent Prefabがプロジェクトビューで利用できるようになっているはずです。

スクリーンショット 2021-09-20 1.24.43

割り当てが終わったら「Build UI」ボタンを押してください。
補足:エディタでタレント/スキルを再配置しても、接続は再配置されません。再配置されるのはBuild UIでUIが生成されたときだけです。
スキルを再配置して、ランタイムでも再配置したい場合は、エディタでこれを行い、ウィザードでUIを再生成する必要があります。
しかし、才能やスキルは、視覚的ではなくデータベースレベルでは、設計された接続といつでもリンクされています。そのため、視覚的なリンクが切れていても、すべてが期待通りに動作します。





Talentus Engine

Talentusエンジンは、デザイン時にスキル/タレントツリーを駆動するために使用されるコンポーネントです。このエンジンには、スキルポイントを使ってスキルを購入したり、戻したり、適用したりする機能があります。また、ランタイムにスキルツリーの状態を保存・読み込みする機能もあります。
このエンジンを使用するには、TalentusEngineからクラスを派生させ、必要に応じて拡張するのが最も良い方法です。カスタム統合の例として、TalentusEngineExtendedスクリプトを用意しました。
タレント/スキルの尊重を示すために、Respec Exampleという新しい例を作成しました。TalentRespecScriptとTalentusEngineWithRespecを見て、すべてがどのように組み合わされているかを確認してください。
それでは、エンジンのAPIを詳しく見ていきましょう。

1.変数
このエンジンには、スキルツリーを割り当てるために使用されるTalentTreeというTalentTreeGraphというパブリック変数しかありません。この変数はエンジン内のあらゆる場所で使用されるので、ツリーがないとエンジンが機能しません。
AvailableSkillPointsは、ユーザーが現在ツリーからスキルを購入するために持っているスキルポイントの数です。
この値は独自のカスタムコードで設定してください(必要に応じてセーブ/ロードすることに注意してください)。

2.メソッド
public virtual void Start ()
エンジンには共通のStartメソッドがあり、自分のクラスでオーバーライドすることができます。注意点としては ベースクラスのStartを呼び出す必要があります。
public virtual void Evaluate ()
タレントが正しい状態にあるかどうかを確認するためにこのメソッドを使用します。このメソッドは エンジンの外からタレントやスキルのプロパティを変更するたびに、このメソッドを呼び出すことをお勧めします。
public virtual void Apply ()
プレイヤーがスキルを購入すると、購入済みとしてマークされますが、Apply()メソッドが呼ばれるまでは、いつでも元に戻せます。Apply()メソッドが呼ばれるまでは、いつでも元に戻すことができます。これにより、プレイヤーはスキルポイントをツリーに割り当てる際のオプションを確認することができます。ツリーにスキルポイントを割り当てる際の選択肢を確認することができます。この場合、プレイヤーはいつでもその選択を取り消すことができます。Applyは変更を永続的にします。これは つまり、ツリーを保存するためには、事前に適用しておく必要があります。
public virtual void Revert ()
revertメソッドでは、エンドユーザーが適用しなかった選択項目がすべて取り消されます。これにより、スキルツリーは、エンドユーザーが利用可能なスキルポイントを弄る前の状態に戻ります。
public virtual void BuyTalent(TalentTreeNodeBase talent)
BuyTalentは、特定のタレント/スキルを購入済みとしてマークするために使用されます。注意点としては、変更が永続的になる前にツリーのApplyを呼び出す必要があります。購入したい才能/スキルを渡す必要があります。才能に複数のレベルやコストがある場合は、システムがこれを処理しますのでご注意ください。
このメソッドを呼び出すたびに、ツリーは自分自身を評価します。
public bool CanBeUnbought(TalentTreeNodeBase talent)
提供されたタレントに対して、ツリーの評価を壊さずに購入と適用の操作をロールバックしても問題ないかどうかのチェックを行います。
タレントを尊重しても問題ない場合は true を返し、そうでない場合は false を返します。
public TalentTreeNodeLevel UnBuy(TalentTreeNodeBase talent)
CanBeUnbought()を呼び出して、ツリーが壊れないかどうかを確認してください。買い戻したタレントのレベルとコストを含むクラスを返します。
public virtual void RevertTalent(TalentTreeNodeBase talent)
RevertTalentは、Applyの前にスキルを買ったとマークしていた状態を元に戻します。その際には 購入したいタレント/スキルを渡す必要があります。才能に複数のレベルやコストがある場合は、システムがこれを処理します。処理します。
このメソッドを呼び出すたびに、ツリーは自分自身を評価します。
public string SaveToString()
SaveToString()は、タレント・ツリーの現在の状態を含む、あらかじめ定義された形式の文字列を返します(状態はApply()を呼び出した後にのみ固定され、適用されていない変更はこの文字列には保存されません)。
この文字列を使用して、ゲームのセーブファイルと一緒にスキルツリーを保存します(Talentusはゲームのセーブ/ロードアセットではないので、実装すべき機能です)。
TalentusTreeExtended.csファイルには、シンプルなテキストファイルへの保存/読み込みの例を用意しました。
public void LoadFromString(string statuses)
LoadFromString()は、ステータス文字列で提供される設定に従って、タレント・ツリーの状態を設定します。statuses文字列によって提供される設定に従って、タレント・ツリーの状態を設定します。この文字列は、SaveToString()メソッドで生成された定義済みのフォーマットでなければならないことに注意してください。メソッドで生成された定義済みの形式でなければならないことに注意してください。パラメータ値を変更しようとすると、スキルツリーが壊れてしまいます。
このLoadFromStringメソッドを使用して、スキルツリーをロードゲーム機能と一緒にロードします。(Talentusはゲームのセーブ/ロード用アセットではないので、実装すべき機能です)。
TalentusTreeExtended.csファイルには、シンプルなテキストファイルへの保存/読み込みの例があります。

3. Event
(TalentTree) TalentSelected(object sender, TalentTreeGraph.TalentSelectedEventArgs e)

タレント(パラメータeの引数)が選択された、つまり購入されたが確定(適用)されていない されていないことを意味します。コストは利用可能なスキルポイントから減らされます。
(TalentTree) TalentReverted(object sender, TalentTreeGraph.TalentRevertedEventArgs e)
タレント(パラメータeの引数)が元に戻されました。つまり、選択された操作がキャンセルされ、コストが利用可能なスキルポイントに戻されます。
(TalentTree) TalentBought(object sender, TalentTreeGraph.TalentBoughtEventArgs e)
タレント(パラメータeの引数)が適用され、元に戻すことはできません。この時点では、利用可能なスキルポイントを使ったアクションは起こりません。
(TalentTree) TalentTree_TreeEvaluated(object sender, TalentTreeGraph.TreeEvaluatedEventArgs e)
ツリーが評価されました。このイベントは、ツリー内のスキルの状態を再描画するために使用できます。このイベントは、ツリー内のスキルの状態を再描画するために使用できます。例としては、TalentUIを参照してください。
(TalentTree) TalentTree_TalentUnBought(object sender, TalentTreeGraph.TalentUnBoughtEventArgs e)
タレントが購入解除されました。これは、リスペクトのためにタレントがロールバックされたことを意味します。要求のためにロールバックされたことを意味します。例として、TalentEngineWithRespecを参照してください。

最後に

このアセットは下記リンクから購入できます。

https://assetstore.unity.com/packages/tools/gui/talentus-pro-109955?aid=1100lK2c

私が製作したゲーム「飛べゴリラ」でも利用する予定です。9月中のアップデートで公開されます。飛べゴリラは下記リンクからダウンロードできます。


この記事が気に入ったらサポートをしてみませんか?