1

Unity で 2D トップダウン ゲームを作成していますが、Unity は初めてです。

プレイヤーキャラクターは北、南、東、西に面することができます。

キャラクターが向いている方向ごとに、アイドル、ウォーク、またはアタックを維持できます。

私は現在、アニメーションを行うためにキャラクター リグ メソッドを使用しています。つまり、プレイヤーの動くことができる各パーツは、ゲーム オブジェクトのスプライトです。たとえば、頭は 1 つのゲーム オブジェクトであり、左上脚、左脚下、左足はすべて別のゲーム オブジェクトです。

アニメーション クリップは Unity で作成されます。

キャラクターが向いている方向ごとに使用されるスプライトも異なります。たとえば、キャラクターが北を向いている場合、キャラクターの後頭部が表示されますが、キャラクターが南を向いている場合、キャラクターの顔全体が表示されます。

いくつか質問があります:

  1. これは、4 つの方向 (北、南、西、東) の各モード (アイドル、ウォーク、アタック) 用に一連のゲーム オブジェクトを作成する必要があるということですか? 3x4 = 12 セットのゲーム オブジェクト スプライト?

  2. 1 セットのゲーム オブジェクトを 1 度だけ出現させるにはどうすればよいですか? たとえば、1 つのセットのみが表示され、南向きの Idle のみが表示されますが、残りの方向とモードは「非表示」にする必要がありますか?

  3. あるモードから別のモードに移行するにはどうすればよいですか? 例えば、南向きのアイドルから東向きのウォーキング、北向きの攻撃まで?

4

1 に答える 1

1

まず、Anima2D を試しましたか。これは、ボーンを使用して 2D キャラクターをアニメーション化するための Unity Technologies による無料の Unity プラグインです。これにより、アニメーション プロセスがはるかに高速かつ簡単になります。Anima2D に関する役立つビデオがいくつかあります。

https://www.youtube.com/watch?v=lG4AeOriIco&

https://www.youtube.com/watch?v=MhOJ742NSoM&

あなたの質問について:

  1. キャラクターを異なるビューで見たい場合は、GameObject の少なくとも 3 つのグループを作成する必要があります (正面、背面、およびプロファイル - 右向きまたは左向き)。ただし、右向きまたは左向きのキャラクターごとに異なるグループを作成する必要はありません。transform.scale.x を -1 または 1 に変更するだけです。例:

     if(/*Character is turned right*/){
         transform.localScale = new Vector3(1, 1, 1);
     } else if(/*Character is turned left*/){
         //This will mirrow you character
         transform.localScale = new Vector3(-1, 1, 1);
     }
    

    しかし、キャラクターの右側と左側に差をつけたい場合は、GameObject の 2 つの異なるグループを作成する必要があります。

  2. GameObject.SetActive を使用して、シーン内のいくつかのゲームオブジェクトをオフまたはオンにすることができます。たとえば、次のようなゲーム オブジェクトの構造があるとします。 ゲーム オブジェクトの 構造 (スクリプトはプレーヤー上にあり ます) 次に、次のようなコードを使用できます。

     //Choose any name for class
     public class PlayerController : MonoBehaviour {
         //Enum for states of player
         enum state{
             Front = 0,
             Back = 1,
             Profile = 2
         }
    
         //Set 0th to Front state GO, 1st to Back state GO, 2nd to Profile state GO in inspector
         [SerializeField]
         private List<GameObject> parentsForEachState;
         //Field to know current state and current set of GameObjects to show
         private state currentState = state.Front;
    
         void SwitchState(state newState){
             for(int i = 0; i < 3/*Number of states*/; i++){
                 if(i == (int)newState){
                     parentsForEachState[i].SetActive(true);
                 } else {
                     parentsForEachState[i].SetActive(false);
                 }
                 //Also set animation of parentsForEachState[newState] to what you want
                 currentState = newState;
             }
         }
     }
    
  3. これらの状態間をスムーズに移行するバリアントは見当たりません。したがって、前のコードで示したように、GameObject を切り替えることをお勧めします。標準の Unity アニメーション トランジションを使用して、よりスムーズにすることもできます。したがって、Idle South から Idle East に切り替えてから、Idle East から Walking East に切り替えることをお勧めします。これは、Idle South から Walking East に切り替えるだけで見栄えが良くなります。

于 2020-07-03T09:31:18.540 に答える