2017-05-18 10 views
0

私はキャラクターが衣服を変えることができる衣服システムを設計しています。Unity3D衣類交換システム

今私は、私の心に来て二つの方法があります最初は、最も簡単なものです:ちょうど非アクティブ古着や新しい服のゲームオブジェクトを活性化させるが、これはもちろん、大量のメモリを取り上げます。

第二の方法は、古着のskinmeshrendererに新しい服のskinmeshrenderderからメッシュデータをロードすることです。しかし、これはゲームプレイ中に余分なCPUの計算を引き起こします。

私は1つが良いですか、通常ゲームで使用される他の方法が存在するだろうか?

+0

そして、プレハブからシーンに新しい服を追加するだけで、あなたのモデルの子供として作って、古いものを破壊するのはどうですか? – Logman

+0

これは良い考えです!私は、ファーストクラスの標準的なゲームがどのようにこれを達成するかについてより心配しています。 – ywj7931

答えて

2

AAAの製品は、モデルを変更する必要があるかを動的に依存モデルとそれをロードするために、より洗練された方法を使用します。例えば、あなたがゲームの初めに衣服を選んだら何十種類もの服から選ぶことができれば、1つのモデルだけをロードし、残りのものを取り除く(または全くロードしない)。しかし、ヒーローがさまざまな攻撃やツールを使用するように衣服が動的に変化した場合(例えば、蹴ったときには黒い服を着用しますが、特別な髪型を使用すると裸になります)、すべてのモデルがロードされ、最後に、両方のテクニックを同時に使用できます。しかし、メモリやスピードが重視されていないときに制作を行うと、好きなものを選ぶことができます。

+0

私は初めて服を選ぶだけで、実際にキャラクターのgameObjectにすべての服を追加して、次のシーンにロードするときにそれらを破壊することはできますか?私はResource.Load()を試しましたが、読み込まれた衣服は目に見えなくなりました。私の服には根の骨が必要でした。 – ywj7931

+0

@ ywj7931ロードしたリソースタイプに依存しますが、モデルのプレハブであればインスタンス化する必要があります。 [documentation page](https://docs.unity3d.com/ScriptReference/Resources.Load.html)の2番目の例を見てください。 – Logman

+0

はい私はその例を使って、GameObjectとしてGameObject newobject = Instantiate(Resources.Load( "Shirt_02"、typeof(GameObject)))を使用しました。プレハブは、skinmeshrendererで構成されるTシャツgameobjectです。しかし、メッシュはゲームでは表示されません。手動でインスペクタでルートボーンを正しく設定しても – ywj7931