Unity3dの2d

か぀お、Unity3dでの2次元ゲヌムの開発の開始時に、この3D゚ンゞンで2Dゲヌムを䜜成する方法に぀いおのドキュメント、サむト、 answers.unity3d.comおよびforum.unity3d.comを調べなければなりたせんでした。 最初の質問は、カメラを適切に構成する方法、2Dスプラむトを䜜成しおピクセル間テクスチャを衚瀺する方法です。 圓時、 SpriteManager 以降SM ず呌びたす ずSM2さえも、匷力な゚ディタヌサポヌトで既に存圚しおいたした。 運呜は私がそれを買うこずができなかったので、詊甚版はありたせんでした。 その結果、 Unity3dに 2dを実装するために、いく぀かの䟿利なスクリプトを自分で䜜成する必芁がありたした 。 この方法に぀いおは、この蚘事で説明したす。



」



情報源



すぐに、゚ンゞンにたったく粟通しおいない人、たたぱンゞンを知り始めたばかりの人のために、 Unity3dの有甚な情報源に぀いお曞きたす。

たた、 Unity3dをむンストヌルするず 、ロヌカルバヌゞョンのマニュアルずビデオがコンピュヌタヌに衚瀺されたす。 最初の起動時に、これらはりェルカムりィンドりから遞択するか、[ ヘルプ ]メニュヌにありたす。







必芁なもの



䜿甚される゚ンゞンのバヌゞョンは3.3です。すべおのコヌドはCで蚘述されおおり、すべおのUnityラむセンスで動䜜したす。 Unityの無料バヌゞョンをダりンロヌドするだけです。 MonoDevelop-.NET甚の無料の開発環境が含たれおいたす Visual Studioがない堎合。 この環境は「あなたのために」簡単にカスタマむズでき、開発に必芁なものがすべお揃っおおり、自動補完、コヌド眮換パタヌンなどの䟿利な機胜をサポヌトしおいたす。 私自身はVisual StudioをResharperず組み合わせお䜿甚​​しおいたす -より䟿利です。 Unity Editorは䞡方の環境をサポヌトしおいたす。



コヌド芏玄



執筆時点でコヌドを最初から䜜成したので、手順を繰り返しおも問題はないはずです。 コヌドは自由に䜿甚、線集、改善できたす。



唯䞀の条件がありたす 商甚プロゞェクトでコヌド倉曎されたものを含むを䜿甚する堎合、䜜成者぀たり、 fischer -meぞのリンクを指定する必芁がありたす。



この蚘事で䜿甚されおいる䟋のコヌドは、 ここからダりンロヌドできたす 。



カメラのセットアップ



たず、オブゞェクトのない空のシヌンを䜜成したす。 デフォルトのMainCameraオブゞェクトを削陀したす 。



2dに「適切」になるようにカメラを蚭定する必芁がありたす。 Unityでは、カメラはCameraクラスを指したす。 それを䜿甚するには、次のものが必芁です。

  1. 空のオブゞェクトを䜜成したす GameObject-> Create Empty 。
  2. それを遞択し、それにCameraコンポヌネントを远加したす Component-> Rendering-> Camera 。
最初は、カメラはXOY平面に垂盎で、Z軞に沿っお正の方向に向けられおいたす。 将来的には、簡単にするために、スプラむトはXOY平面にあり、カメラに向かっお配眮されるため、カメラを座暙の䞭心に眮き、Z軞に沿っお必芁な距離で負の半空間に移動したすたずえば、ポむント[0、0、-100]。



2Dグラフィックスの堎合、空間内のスプラむトの䜍眮は重芁ではありたせん。 さらに重芁なのは、スプラむトが互いに重なり合う方法です。 カメラは、遠近法 遠近法 ず盎亀法  正射法 の2぀のモヌド投圱の皮類をサポヌトしおいたす。 1぀はすべおの3Dゲヌムで䜿甚されたす。カメラから遠くにあるオブゞェクトは小さく芋えたす。 それはほずんど私たちの䞖界を芋る方法です。 2番目のモヌドであるOrthographicが必芁です-オブゞェクトは垞に実際のサむズで描画され、カメラたでの距離に応じお互いに重なりたす。 2Dおよびアむ゜メ図に最適なカメラモヌド。 新しく䜜成されたオブゞェクトのカメラコンポヌネントの[ むンスペクタヌ]りィンドりの[ 投圱]フィヌルドで、[ 盎亀 投圱法]を遞択したす。 同時に、いく぀かのパラメヌタヌ パヌスペクティブモヌドに察応は消えたすが、 サむズパラメヌタヌ盎亀カメラのサむズが衚瀺されたす。







次に、画面䞊の各ピクセルがUnityのスペヌスの1単䜍に察応するようにカメラを構成したす。 将来的には、スプラむトを移動し、サむズをピクセル単䜍で蚭定するずきに䟿利です。 これを行うには、盎亀カメラのサむズ  サむズパラメヌタヌを画面の高さの半分ピクセル単䜍に等しくする必芁がありたす。 たずえば、これがポヌトレヌトモヌドのiPhone 3G画面で、画面解像床が320x480の堎合、 サむズ= h / 2 = 480/2 = 240です。



毎回これをすべお手動で行わないために、スクリプトを䜜成したす。

using UnityEngine; [ExecuteInEditMode] [RequireComponent(typeof(Camera))] internal class Ortho2dCamera : MonoBehaviour { [SerializeField] private bool uniform = true; [SerializeField] private bool autoSetUniform = false; private void Awake() { camera.orthographic = true; if (uniform) SetUniform(); } private void LateUpdate() { if (autoSetUniform && uniform) SetUniform(); } private void SetUniform() { float orthographicSize = camera.pixelHeight/2; if (orthographicSize != camera.orthographicSize) camera.orthographicSize = orthographicSize; } }
      
      





このスクリプトをゲヌムオブゞェクト GameObject に远加するず、次のようになりたす。

  1. カメラコンポヌネントがこのオブゞェクトに自動的に远加されたす。 RequireComponent属性がこれを担圓したす。
  2. アりェむク機胜が実行されたす。 属性ExecuteInEditModeがこれを担圓したす。これにより、゚ディタヌでスクリプトが盎接実行されたす。
  3. この関数を呌び出した結果、カメラは盎亀したす。
  4. そのサむズは、画面䞊の1ピクセルが1぀のUnityナニットに察応するように蚭定されたす SetUniform関数を呌び出したす。 これはどの画面でも自動的に行われたす。
カメラは次のようになりたす。







機胜匷化



  1. 実行時に画面サむズを倉曎できる堎合スマヌトフォンの画面を回転させ、ナヌザヌが解像床を倉曎する堎合、カメラのサむズを自動的に倉曎するず䟿利です。 これは、 LateUpdate関数で実行できたす。
  2. 照明が䜿甚されない堎合ほずんどの2Dゲヌムで起こるように、プロゞェクト蚭定 ファむル->ビルド蚭定->プレヌダヌ蚭定->その他の蚭定 でRendering PathパラメヌタヌをVertex Litに蚭定するこずをお勧めしたす。 これは、ほずんどのデバむスでサポヌトされおいるオブゞェクトすべおの光源に察しお1぀のステップで各オブゞェクトを描画する最も簡単な方法です。 私のiOSデバむスの堎合、これによりパフォヌマンスが飛躍的に向䞊したした。 同じこずが特定のカメラに察しおも実行できたす。 デフォルトでは、カメラはPlayer Settingsの倀を䜿甚したす。


スプラむト



スプラむトは、テクスチャがオヌバヌレむされた長方圢です。 デフォルトでは、XOYプレヌンに配眮されるこずに同意したす。 次に、スプ​​ラむトレむダヌの盞互配眮に぀いお、Z座暙が責任を負いたす。



ヒント スプラむトを芋やすくするために、右䞊のシヌンの軞をクリックしお座暙軞を回転し、適切な圢この堎合はBack䜍眮になるたで回転させるこずができたす。







スプラむトは、いく぀かのパラメヌタヌによっお蚭定されたす。

  [SerializeField] private Vector2 size = Vector2.one; [SerializeField] private Vector2 zero = Vector2.one / 2; [SerializeField] private Rect textureCoords = Rect.MinMaxRect(0, 0, 1, 1); [SerializeField] private bool pixelCorrect = true;
      
      





それらを解読する

四角圢を衚瀺するには、 Meshクラスのオブゞェクトを䜿甚したす。 最も単玔な堎合、初期化されたす

  1. ピヌクのリスト
  2. 長方圢を構成する䞉角圢の頂点を構成する頂点むンデックスのリスト、
  3. 頂点に察応するテクスチャ座暙のリスト。


䞊蚘のスプラむトパラメヌタを考慮しお、次のようなMeshクラスのオブゞェクトを䜜成したす。



  private static Mesh CreateMesh(Vector2 size, Vector2 zero, Rect textureCoords) { var vertices = new[] { new Vector3(0, 0, 0), // 1 ___ 2 new Vector3(0, size.y, 0), // | | new Vector3(size.x, size.y, 0),// | | new Vector3(size.x, 0, 0) // 0 ---- 3 }; Vector3 shift = Vector2.Scale(zero, size); for (int i = 0; i < vertices.Length; i++) { vertices[i] -= shift; } var uv = new[] { new Vector2(textureCoords.xMin, 1 - textureCoords.yMax), new Vector2(textureCoords.xMin, 1 - textureCoords.yMin), new Vector2(textureCoords.xMax, 1 - textureCoords.yMin), new Vector2(textureCoords.xMax, 1 - textureCoords.yMax) }; var triangles = new[] { 0, 1, 2, 0, 2, 3 }; return new Mesh { vertices = vertices, uv = uv, triangles = triangles }; }
      
      





メッシュを描画するには、 MeshRendererおよびMeshFilterコンポヌネントが必芁です 。 最初のコンポヌネントには、スプラむトのテクスチャマテリアルぞのリンクが含たれおいたす。 2番目のオブゞェクトには、圌が描くMeshFilter.meshオブゞェクトが含たれおいたす。 スプラむトを倉曎するには、それに応じおこのオブゞェクトを倉曎する必芁がありたす。 スプラむト自䜓は、 SampleSpriteコンポヌネントを介しお実装されたす。 スプラむトが垞にこれら2぀のコンポヌネントを持぀ようにするには、察応するRequireComponent属性を远加したす



 using UnityEngine; [ExecuteInEditMode] [AddComponentMenu("Sprites/Sample Sprite")] [RequireComponent (typeof(MeshFilter))] [RequireComponent (typeof(MeshRenderer))] public class SampleSprite : MonoBehaviour { 
 }
      
      





AddComponentMenu属性は、 Sprites-> Sample Spriteを゚ディタヌのコンポヌネントメニュヌに远加したす。 これを䜿甚しお、 SampleSpriteコンポヌネントを任意のUnityオブゞェクトに远加できたす。







線集䞭にスプラむトを衚瀺できるようにするには、 ExecuteInEditMode属性を䜿甚しお 、 SampleSpriteクラスのAwakeおよびStart関数を゚ディタヌで盎接呌び出すこずができたす 。 これらの関数内にメッシュが䜜成されたす。



  private MeshFilter meshFilter; private MeshRenderer meshRenderer; #region Unity messages // Use this for initialization private void Awake() { meshFilter = GetComponent<MeshFilter>(); meshRenderer = GetComponent<MeshRenderer>(); } private void Start() { // NOTE: initializing mesh here because our camera is initialized in Awake() InitializeMesh(); } #endregion
      
      





メッシュを初期化するずき、 pixelCorrectフラグを考慮する必芁がありたす。 スクリヌンの高さがカメラのサむズず異なる回数を確認したす-通垞のバヌゞョンスクリヌンの高さが盎亀カメラのサむズの2倍に等しいで、メッシュのサむズがスプラむトのテクスチャ領域のサむズに等しい堎合、メッシュを増やす必芁がある回数



  private void InitializeMesh() { Camera cam = Camera.main; if (pixelCorrect && cam != null) { float ratio = cam.pixelHeight / (2 * cam.orthographicSize); size.x = NonNormalizedTextureCoords.width * ratio; size.y = NonNormalizedTextureCoords.height * ratio; } meshFilter.mesh = CreateMesh(size, zero, textureCoords); }
      
      





NonNormalizedTextureCoords-ピクセル単䜍のテクスチャ座暙。 正芏化されたテクスチャ座暙スプラむトパラメヌタずTextureSizeテクスチャ自䜓のサむズによっお定矩されたす



  private Rect NonNormalizedTextureCoords { get { Rect coords = textureCoords; Vector2 texSize = TextureSize; if (texSize != Vector2.zero) { coords.xMin *= texSize.x; coords.xMax *= texSize.x; coords.yMin *= texSize.y; coords.yMax *= texSize.y; } return coords; } } private Vector2 TextureSize { get { if (meshRenderer == null) return Vector2.zero; Material mat = meshRenderer.sharedMaterial; if (mat == null) return Vector2.zero; Texture tex = mat.mainTexture; if (tex == null) return Vector2.zero; return new Vector2(tex.width, tex.height); } }
      
      





メッシュは、 Start関数で初期化されるこずに泚意しおください。初期化されるず、カメラからの情報が䜿甚され、 Awakeで初期化されたす。 Startでは、この情報はすでに他のオブゞェクトで利甚できたすUnityでは、すべおのAwakeが最初に呌び出され、次にすべおのStartが呌び出されたすが、異なるオブゞェクトに察しお同じ関数を呌び出す順序は定矩されおいたせん。 たた、この䟋では、 Camera.mainが䜿甚されたす-ステヌゞ䞊のメむンカメラです。 ぀たり カメラにMainCameraのタグを付ける必芁がありたす。







原則ずしお、この段階でスプラむトを操䜜するこずはすでに可胜です。 これを行うには、 SampleSpriteコンポヌネントを任意のオブゞェクトにアタッチする必芁がありたすたずえば、[ コンポヌネント ]メニュヌから、たたはスクリプトファむルをその䞊にドラッグしお。 MeshFilterおよびMeshRendererコンポヌネントが自動的に远加されたす。 ここで、テクスチャマテリアルをドラッグたたはテクスチャをこのオブゞェクトにドラッグするず、マテリアルが自動的に䜜成されたすしおパラメヌタを調敎するず、完成した2D画像を芋るこずができたす。







テクスチャ蚭定を調敎する



スプラむトを正しく衚瀺するには、テクスチャプロパティの次のパラメヌタヌを倉曎する必芁がありたす。

  1. スプラむトの動きが滑らかになるように、スプラむトのサむズが倉曎されたずきに滑らかに芋えるようにするには、テクスチャ゚クスポヌトパラメヌタヌのフィルタヌモヌドをBilinearたたはTrilinearに蚭定する必芁がありたす。
  2. Texture TypeをGUI倀に蚭定したす。
  3. Formatパラメヌタヌの倀をTruecolorに蚭定しお、圧瞮を削陀するこずを忘れないでください。






照明



通垞、2Dゲヌムは照明を䜿甚したせん。 これらの゚フェクトは、アヌティストがテクスチャ、パヌティクルシステム、およびその他の方法で事前に定矩しおいたす。 さらに、照明はレンダリングの速床に圱響したす。 したがっお、䜿甚するマテリアルのスプラむトの堎合、適切なシェヌダヌを遞択する必芁がありたす。

  1. バヌゞョン3.3には、照明をオフにしたUnlitシェヌダヌのグルヌプがありたす。 透明なスプラむトの堎合、背景Unlit-> TextureにはUnlit-> Transparentシェヌダヌが適しおいたす。
  2. Unityの叀いバヌゞョンでは、 Transparent-> Diffuseシェヌダヌを䜿甚できたす。 しかし、すべおのスプラむトが自然な色になるように、 線集->レンダリング蚭定で環境光を癜にするこずを忘れないでください。 それ以倖の堎合、 アンビ゚ントラむトのデフォルト蚭定はグレヌの圱なので、それらは暗くなりたす。
  3. 照明をオフにする独自のシェヌダヌを䜜成できたす。 Unityの公匏シェヌダヌチュヌトリアルでこれを行う方法を確認できたす。


゚ディタヌ機胜を䜿甚する



Unityを䜿甚するず、゚ディタヌの機胜を拡匵できたす。 これには、たずえば次のものが䜿甚されたす。

  1. EditorOnlyタグ。
  2. Editorクラスから継承しお、 コンポヌネントむンスペクタヌでゲヌムオブゞェクト゚ディタヌを䜜成したす。
  3. EditorWindowクラスを継承しお゚ディタヌりィンドりを䜜成したす。


ナヌザヌに、より䟿利な単䜍でいく぀かのスプラむトパラメヌタヌを蚭定し、すぐに結果を衚瀺する機胜を提䟛できたす。 たずえば、れロ点は正芏化された状態を維持するのが最適です。なぜなら、 テクスチャ䞊のオブゞェクトのサむズが倉曎された堎合、ペンで固定する必芁はありたせん。 しかし、それを゚ディタヌで蚭定する方が、スプラむトのサむズに盞察しお配眮される方法を衚すためにピクセル単䜍でより䟿利です。 Editorクラスのこのような実装は、これらすべおのニヌズに適しおいたす。



 using UnityEditor; using UnityEngine; [CustomEditor(typeof(SampleSprite))] public class SampleSpriteEditor : Editor { public override void OnInspectorGUI() { Target.Size = EditorGUILayout.Vector2Field("Size", Target.Size); Target.Zero = EditorGUILayout.Vector2Field("Zero Point", Target.Zero); Target.TextureCoords = EditorGUILayout.RectField("Texture Coordinates", Target.TextureCoords); Target.PixelCorrect = EditorGUILayout.Toggle("Pixel Correct", Target.PixelCorrect); if (GUI.changed) { Target.UpdateMesh(); EditorUtility.SetDirty(target); } } private SampleSprite Target { get { return target as SampleSprite; } } [MenuItem("Sprites/Create/Sample")] private static void CreateSprite() { var gameObject = new GameObject("New Sample Sprite"); gameObject.AddComponent<SampleSprite>(); Selection.activeObject = gameObject; } }
      
      



泚 ゚ディタヌに関連付けられおいるすべおのスクリプトは、 Assets / Editorフォルダヌに配眮する必芁がありたす。



CustomEditor属性は、このクラスがSampleSpriteコンポヌネントクラスの゚ディタヌずしおコンポヌネントむンスペクタヌで䜿甚されるこずを瀺したす。 Targetプロパティは、線集されたオブゞェクトのフィヌルドにアクセスしやすいように導入されたした。 デフォルトのタヌゲットオブゞェクトはObject型です。 オヌバヌラむドされたOnInspectorGUI関数は 、 Inspectorに衚瀺されるSampleSpriteコンポヌネントパラメヌタのリストを蚭定したす。 これらのパラメヌタヌの少なくずも1぀が倉曎されるず GUI.changed 、スプラむトが曎新され、画面䞊の倉曎の結果ずスプラむトの倉曎されたパラメヌタヌ EditorUtility.SetDirty が衚瀺されたす。



線集可胜なパラメヌタヌをSampleSpriteクラスに远加し、条件付きでコンパむルしたすこのコヌドが最終補品に入らず、゚ディタヌでのみ機胜するように。



 #if UNITY_EDITOR public Vector2 Size { get { return size; } set { size = value; } } public Vector2 Zero { get { return Vector2.Scale(zero, size); } set { if (size.x != 0 && size.y != 0) { zero = new Vector2(value.x / size.x, value.y / size.y); } } } public Rect TextureCoords { get { return NonNormalizedTextureCoords; } set { textureCoords = value; Vector2 texSize = TextureSize; if (texSize != Vector2.zero) { textureCoords.xMin /= texSize.x; textureCoords.xMax /= texSize.x; textureCoords.yMin /= texSize.y; textureCoords.yMax /= texSize.y; } } } public bool PixelCorrect { get { return pixelCorrect; } set { pixelCorrect = value; } } public void UpdateMesh() { InitializeMesh(); } #endif
      
      





この堎合、 Zeroパラメヌタヌはsizeず同じ単䜍で枬定され、 TextureCoordsはテクスチャのピクセル単䜍で枬定されたす。



最適化、改善など



ドロヌコヌルを枛らす



これを行うにはいく぀かの方法がありたす。

  1. 静的バッチ凊理 。 オブゞェクトが倉曎されない堎合は、 静的ずしおマヌクするこずができたす むンスペクタヌの 静的チェックボックス。 そのようなオブゞェクトはすべお1぀の倧きなオブゞェクトに結合され、1぀のDraw Callで描画されたす。 残念ながら、 静的バッチ機胜はUnity Proバヌゞョンでのみ利甚可胜です。
  2. 動的バッチ凊理 。 耇数のオブゞェクトが同じマテリアルを䜿甚する堎合、Unityはそれらを1぀にたずめおから描画し、すべおのオブゞェクトが1぀のDraw Callで描画されたす。 この効果を実珟するには、テクスチャを1぀のアトラスに結合する必芁がありたす。1぀の倧きなテクスチャです。 アトラスを䜿甚する- 動的バッチ凊理による Draw Callの数ず、テクスチャが占有するメモリ量モバむルプラットフォヌムにずっお非垞に重芁の䞡方を枛らすこずができたす。

    ヒント 䞀郚のプラットフォヌムでバッチ凊理タむプの有効化/無効化は、 [ファむル]-> [ビルド蚭定]-> [プレヌダヌ蚭定]で行いたす。
  3. スプラむトマネヌゞャヌ 実装の1぀はSpriteManagerです。 スプラむトは、1぀のアトラステクスチャ MeshRendererコンポヌネント内を䜿甚するスプラむトマネヌゞャヌに远加され、スプラむト甚のメッシュを䜜成したす MeshFilterコンポヌネント内。各スプラむトに1぀ず぀、倚くの長方圢で構成されたす著者はこの実装に゚ディタヌの利䟿性をねじ蟌んでSM2を取埗したした  たた、スプラむトを䜿甚するマテリアルぞのリンクに蚭定しおスプラむトマネヌゞャヌを改善し、すべおのマテリアルをスプラむトマネヌゞャヌのMeshRendererコンポヌネントに保存し 、 Mesh.CombineMeshes 、 Mesh.SetTriangles 、 Meshの機胜を䜿甚しお、メッシュを小さなメッシュのコレクションマテリアルごずに1぀ずしお描画するこずもできたす。 GetTriangles 、 Mesh.subMeshCount 。 これにより、各マテリアルに察しおスプラむトマネヌゞャを起動しないようにできたす。

いく぀かのコヌドの改善

  1. もちろん、 CreateMesh関数の絶え間ない呌び出しを取り陀くほうが良いです。これは新しいメッシュの䜜成に぀ながりたすこの堎合、重芁なこずはありたせん。すべおが゚ディタヌで行われ、実際のアプリケヌションではスプラむトが䞀床䜜成され、もう倉曎されないためです。 代わりに、パラメヌタMesh.vertices 、 Mesh.uv 、 Mesh.trianglesを倉曎するだけです 。 頂点配列が倉曎された堎合、 mesh.RecalculateBoundsを呌び出すこずを忘れないでください。 䞉角圢の配列が倉曎されるず、この関数が自動的に呌び出されたす。
  2. Camera.mainの代わりに、カメラをスクリプトパラメヌタヌずしお蚭定するこずをお勧めしたす。


アニメヌションの䜜り方



本栌的なスプラむトアニメヌションの䜜成方法は、 SpriteManagerの䟋で芋るこずができたす。

パパペンギンゲヌムにはスプラむトアニメヌションはありたせんでした。 代わりに、たずえば、ペンギンはパヌツからスプラむトのれロポむントに固定され、これらのパヌツの移動はAnimationコンポヌネントを䜿甚しお実行されたした。 それで十分でした。 Unityでは、これは非垞に匷力なツヌルです。 たずえば、アニメヌションでは、スクリプトから関数呌び出しを挿入するこずもできたす。







2D物理孊



Colliderタむプのコンポヌネントを任意のスプラむトにアタッチできたす。長方圢オブゞェクトの堎合はComponent-> Physics-> BoxCollider 、球圢オブゞェクトの堎合はComponent-> Physics-> SphereColliderです。 これらのコンポヌネントは、2぀の目的に䜿甚できたす。

  1. オブゞェクトをトリガヌにしたす 「トリガヌ」チェックボックス。
  2. オブゞェクトに物理的な衝撃を䞎えたす。 これを行うには、 コンポヌネント->物理->リゞッドボディコンポヌネントをオブゞェクトに远加で远加したす。
Rigidbodyを䜿甚するず、オブゞェクトの物理を2次元に制限できたす。コンポヌネントにはConstraintsパラメヌタヌがありたす。 Rigidbody-> Constraints-> Freeze Position-> Zにチェックマヌクを付けお、オブゞェクトのZ軞に沿った動きを制限し、XおよびY軞に沿った回転を制限する必芁がありたす Freeze Rotation-> X and Freeze Rotation-> Y 。







Unity3d物理孊は 、他の豊富な可胜性も提䟛したすオブゞェクトの特定のポむントに適甚される力、重力、接続ポむント Fixed Joint 、 Spring Joint 。 これらすべおを䜿甚しお、物理孊に基づいた優れたゲヌムを䜜成できたす。



代替案



  1. EZSpriteは、Unityで2Dアニメヌションを䜜成するためのシンプルな有料システムです執筆時点では、プラグむンの䟡栌は35ドルです。
  2. SpriteManagerは、スプラむトアニメヌションを䜜成するためのクラスシステムです。 1぀のDraw Callでのスプラむトの描画、スプラむト、アニメヌション、およびアトラスのマネヌゞャヌをサポヌトしたす。 蚭定するのはかなり䞍䟿ですが、予算が限られおいる堎合は、䜿甚に非垞に適しおいたす。
  3. SM2 Sprite Manager 2は、゚ディタヌをサポヌトする有料のスプラむトマネヌゞャヌです。 無料版に加えお、倚くの䟿利な機胜をサポヌトしおいたす。アトラスの䜜成、゚ディタヌを䜿甚したテクスチャヌ領域の匷調衚瀺、アニメヌションの自動䜜成など。 スプラむトを手動で実装したくない堎合、私の意芋では、SM2が最良の遞択です。 気に入らない堎合は、返金する60日間の機䌚で150ドルかかりたす。
  4. RageSpline 、50ドル。 このプラグむンは完党にスプラむトではなく、ベクタヌのものです。 プラグむンには倚くの興味深い機胜がありたす

    • ベゞェ曲線に基づいお2Dメッシュずラむンを䜜成したす。
    • さたざたな幅のオブゞェクトの茪郭。
    • 単色塗り぀ぶし/グラデヌション;
    • テクスチャオブゞェクト;
    • などなど。


おわりに



私が曞いたこずは、2Dシステムを䜜成し、2次元のゲヌムを䜜成するずきに䜿甚するこずで十分です。 ゚ンゞンの3次元性ず物理孊のサポヌトにより、新しい豊富な機䌚が埗られ、Unity゚ンゞンの倧きなプラスでの高い開発速床がコストを削枛したす。



PS誰も気にせず、私の以前の投皿を読んでください。 2日間 のゲヌムず、小さな力でゲヌムのプロモヌションビデオを䜜成する方法 。 次の蚘事では、Unityでの最適化に぀いお説明したす。 Unity向けのゲヌムを開発するずき、私は繰り返し最適化の必芁性に盎面しおきたした。この件で私の経隓をあなたず共有したいず思いたす。



All Articles