Unity-初心者のための概念的なアイデアとヒントigrodeva。 2Dゲーム用の簡単な手続き型モデルの生成

問題の紹介



親愛なる読者の皆さん、こんにちは!



「初心者のための概念的なアイデアigrodev」という一連の簡単なレッスンを作成することについての考えは、私の現在のプロジェクトの作成中のモスクワ時間の2時頃に思いつきました。 まあ、いや、それは自発的であるように思えますが、おそらく、私の潜在意識はそのように反応しました。 ますます若く(私自身)、非常に若いプログラマーがゲームの作成を開始することを決めたため、反応しました。 若いプログラマー(およびプログラミングの分野に興味のある人々)の一般的な傾向は、Webサイトやファッションブログの作成からエンターテイメント製品の作成にスムーズに移行したように思えます。 私は友人の間でこれに気づき始めました。彼らはかつて、ゲームは本格的なプログラミングではないと言いましたが、今ではすでにこの環境に真の関心を示しています。



これを次の明白な方法で自分に説明します。 情報トレンドは、選択された情報フィールドで特定のタスクを実行するためのシンプルで適切なツールの存在と、完了したタスクを販売する際の利益を上げるという2つの条件が満たされた場合に学習する大規模なトレンドを獲得します。 例として、ウェブ技術の領域を再度引用することができます(かつてサイトが超ハードコアで作成され、今ではおそらく私の母親でさえWordPressまたはその類似物にブログを置くことができます。世界中のすべてのママに、そしてウェブサイトが急速な人気、名声、お金、ラム酒へのアクセスを開いたため)。



しかし、エンターテインメントの時代が到来しました-最初のゲームがどれほど難しく作られたかは言及しませんが、数十年が経ち、有料ゲームエンジンが登場し始めました。 「牛を奪う」ことだけができ、夢のプロジェクトを実現できる複雑な開発環境であるマストドンエンジン。 ただし、これらの一般的な技術には欠点があります。 すなわち、多数の標準以下の製品。 独自の何かを発明するのが面倒です...「私は、だらしない鳥をやるほうがいい!」ヴァシャを考えました。



そして、私は、人々が最初のプロジェクトで使用できる簡単なアイデア、おそらくそれほど前ではないがプログラミング全般を勉強し始めた人々からなる一連のレッスンを行うべきだと決めました。



2Dモデルのランダム生成(Unity)



単独でゲームを作成する場合、キャラクター、船、建物、一般的なオブジェクトに多数のスプライトを常に描画できるとは限りません。

ここでは、手続き型(ランダム)生成が役立ちます。 この用語は2語(6語)で何を意味しますか? 「コンピュータはあなたではなくモデルを作成します。」



インターネットでは、ゲーム開発の分野で何百万もの手続き生成アルゴリズムを見つけることができます(そのうちの1つは、私の母が自分のブログで説明していることもあります)。 それらの一部は単純に複雑になり(Nvidia Physicsを使用した水面生成など)、その他はファジィロジックとファジィセット(ファジィセット)を使用したレリーフセグメンテーションなど非常に複雑になります。



それで何? ユニットを2回目に開いた人が、見つかったアルゴリズムを適用するために、ゲームのどの場所でどのように実装するかを理解する方法を考え始めるとは思わない。



独自の実装がより簡単に! シンプルにしましょうが、理解しやすいものにしてください。 そして、これはすべてのプログラミングで最も重要なステップです。

手続き型のモデルのバージョン(2Dゲームに適用可能)を提供します。 私はあなたに警告します、コードは非常に簡単です! 2行! しかし、最初に、コードを実装する前に準備する必要があるもの:



1.手続き的に作成するモデル(またはオブジェクト)を理解します-ナイト、建物、宇宙船などです。

2.必要な数の基本的なパーツに分割します(たとえば、騎士の場合、ヘルメット、剣、盾、よだれかけなど)。

注:個々の要素が小さいほど(たとえば、剣を柄と刃に分ける)、生成されたモデルがより自然でユニークに見えることは明らかです。

3.各要素に、適切な数の異なるスプライトを描画します。

4.必要に応じて、Unityエディターでモデルをビルドします。 現在のプロジェクトのモデル船を例として使用します。



画像



ここに私の詳細があります。スプライトはステージ上に散らばっており、そこから幾何学的に必要なモデルを組み立てます。



画像



そして、コードが来ています!



using UnityEngine; using System.Collections; public class ChangeTextureF : MonoBehaviour { //   Sprites        public Sprite[] Sprites; void Start() { //       ChangeTextureFunc(); } public void ChangeTextureFunc() { //      0  //   ,  Random.Range //     int ChooseForTexture = Random.Range (0, Sprites.Length); //    SpriteRenderer,    //        , //    . GetComponent<SpriteRenderer> ().sprite = Sprites[ChooseForTexture]; } }
      
      





ChangeTextureFunc()関数には、約束どおり2行のコードしか含まれていません。

スクリーンショットに示すように、オブジェクトの各要素にスクリプトを掛けます。 各要素のスプライトをエディターで直接配列にドロップし、結果を楽しんでください。



画像



効果的な結果:



画像画像



PSモデルのスプライトを同じサイズにして、モデルに変位がないようにしますが、メインセットとサイズが根本的に異なる非常に精巧なスプライトを作成したい場合は、スプライトエディターで回転ポイントを移動します(必要なだけスプライトの中心を決定するピボットポイント)。 Unityでこの機能を忘れることがあります。



画像



結論:

もちろん、手続き型モデルの生成を受け取ると言って少しlittleしました。むしろ、これは与えられたスプライトからのモデルの迅速な組み合わせと呼ぶことができます。 しかし、私はこのアプローチを守るために言いたい:

1)コードはありません。3つのボートを描画して、それぞれを3つの同一の要素に分割し、出力で27のモデル船を取得します。 やったー

2)あなたはクールな頭脳であり、選択したアルゴリズムと船の輪郭を書き、自分の色に置き換えることができると言いますが、1,000,000の組み合わせがありますが、それを忘れないで各モデルがクラックされると答えますアートを含むゲーム開発。 そして、あなたの無味な狂気の10,000は誰にも記憶されません。

3)初心者にとって、これは、このアイデアを広範かつ詳細に開発するよう促すことができる印象的な結果になります。



アイデア:

ところで、ここに、この記事を書いたときに思いついた例、これを興味深い方法で使用する方法を示します。

1)ゲームの設定に適合するパラメーターを含むスクリプトを各要素に掛けます。たとえば、宇宙船の場合は、パラメーターにすることができます:船の速度、損傷、馬力の数、またはこのタイプのパーツからのみ取得される能力です。 次に、すべての詳細が含まれるメインの親オブジェクト、各部分からパラメーターを収集するスクリプトをスローします。たとえば、それらを要約して、ボートの一般的な特性を取得します。

2)ポイント1からのアイデアは、ゲームプレイでさらに深く使用できます。たとえば、RPGゲームでは、「レベル80の暴徒」という碑文ではなく、相手の服装で相手を評価できます。火と稲妻の影響を受けなかった以前の暴徒の鎧。 つまり、テキストプロンプトを使用せずに、プレーヤーは特性に対する特定のものの効果を実験的に見つけます。



それで、私は何について話しているのですか? ゲームを作成する際に、100万の機能を実装する非常に複雑なコードを追いかけることは主なことではありません。ゲームを作成する際の主なことは、最小限の労力で新しい興味深いアイデアを引き出すことです。 第一に、それはあなたの機知と創意工夫を刺激し、第二に、さらなる新しいアイデアの実装のためのエネルギーを節約します。 そして、あなたは単調な工芸品の現代市場を変えることができます...たぶん、あなたは名声、お金、または単に自己満足を得ることができます。 あなたはこれのためにゲームを作り始めましたか?



All Articles