리소스(콘텐츠) 로드(Loading Resources)

페이지 업데이트 :
페이지 생성 날짜 :

요약

이미지 파일 및 모델 파일과 같은 리소스를 가져오는 방법에 대해 설명합니다.

リソース(コンテンツ)の読み込み

운영 환경

필수 구성 요소

지원되는 XNA 버전
  • 2.0
  • 3.0
  • 3.1
  • 4.0
지원되는 플랫폼
  • Windows(XP SP2 이상, Vista, 7)
  • 엑스박스 360
  • 윈도우 폰 7
Windows 필수 버텍스 셰이더 버전 2.0
Windows 필수 픽셀 셰이더 버전 2.0

운영 환경

플랫폼
  • 윈도우 7
  • 엑스박스 360
  • Windows Phone 7 에뮬레이터

물질

게임에서 사용하는 이미지 파일, 모델 파일, 사운드 파일 등은 사전에 프로젝트에 추가해야 합니다.

ファイルを追加します

리소스가 될 파일을 추가합니다. 이미지와 모델은 기본적으로 "콘텐츠" 프로젝트에 추가됩니다. 콘텐츠 프로젝트를 마우스 오른쪽 단추로 클릭하고 기존 항목을 선택합니다.

既存項目の追加ダイアログ

기존 항목 추가 대화 상자가 열립니다. 추가할 파일을 선택하고 추가 버튼을 클릭합니다.

그림과 같이 파일이 프로젝트에 추가된 것을 볼 수 있습니다.

ドラッグ&ドロップでも追加可能

대화 상자에서 추가하지 않으려면 탐색기에서 드래그 앤 드롭하여 추가할 수도 있습니다. 그러나 Windows Vista와 Windows 7에서는 실행된 응용 프로그램의 권한이 다른 경우 드래그 앤 드롭할 수 없습니다.

파일을 추가했으면 파일을 읽을 프로그램을 만듭니다. 프로젝트에 리소스를 추가할 때 Content Pipeline은 . .xnb 파일, 게임에서 사용하기에 적합합니다. 이를 읽으려면 "ContentManager" 클래스를 사용합니다. ContentManager 클래스는 Game 클래스에 내장되어 있습니다.

리소스(콘텐츠)를 로드하려면 "ContentManager.Load" 메서드를 사용합니다. 이번에는 적당히 읽어 다른 용도로 사용하지 않습니다. 로드하는 파일 형식에 따라 만드는 클래스가 다르기 때문에 Load 메서드의 형식 매개 변수로 "Texture2D" 또는 "SpriteFont"를 지정하여 파일에 따라 클래스를 만듭니다. 또한 인수에 전달된 매개변수는 콘텐츠 프로젝트 또는 "ContentManager.RootDirectory"에 지정된 폴더를 기준으로 하므로 폴더 이름(정확히는 에셋 이름)을 포함하여 파일 이름(확장자 제외)을 지정해야 합니다.

Texture2D texture = this.Content.Load<Texture2D>("Texture");
SpriteFont font = this.Content.Load<SpriteFont>("Font");
Model xModel = this.Content.Load<Model>("XModel");

ContentManager.Load 메서드

콘텐츠 파이프라인에 의해 생성된 자산을 읽고 type 매개 변수에 지정된 클래스의 인스턴스를 만듭니다. 또한 이미 생성된 자산을 지정하면 기존 인스턴스에 대한 참조가 반환됩니다.

T 제한 없음 자산 유형을 지정합니다. 기본적으로 지정할 수 있는 클래스로는 "Model", "SpriteFont", "Effect", "Texture2D", "Texture", "TextureCube" 등이 있지만, "string", "List<T>"와 같이 직렬화 가능한 클래스와 직접 만든 클래스도 지정할 수 있습니다.
assetName (영문) 문자열 가져올 자산의 이름을 지정합니다. 지정된 루트 디렉터리의 상대 경로이기 때문에 폴더가 있는 경우 경로를 작성해야 합니다. 또한 자산 이름은 파일 이름과 동일하지 않습니다.
반환 값 T 로드된 자산의 인스턴스(T)를 반환합니다. 이전에 동일한 자산을 로드한 경우 이전과 동일한 인스턴스에 대한 참조만 반환합니다.

다른 팁은 콘텐츠를 로드한다고 가정하므로 확실하지 않은 경우 이 페이지를 참조하십시오.

모든 코드

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
#if WINDOWS_PHONE
using Microsoft.Xna.Framework.Input.Touch;
#endif

namespace LoadResource
{
    /// <summary>
    /// ゲームメインクラス
    /// </summary>
    public class GameMain : Microsoft.Xna.Framework.Game
    {
        /// <summary>
        /// グラフィックデバイス管理クラス
        /// </summary>
        private GraphicsDeviceManager graphics = null;

        /// <summary>
        /// スプライトのバッチ化クラス
        /// </summary>
        private SpriteBatch spriteBatch = null;


        /// <summary>
        /// GameMain コンストラクタ
        /// </summary>
        public GameMain()
        {
            // グラフィックデバイス管理クラスの作成
            this.graphics = new GraphicsDeviceManager(this);

            // ゲームコンテンツのルートディレクトリを設定
            this.Content.RootDirectory = "Content";

#if WINDOWS_PHONE
            // Windows Phone のデフォルトのフレームレートは 30 FPS
            this.TargetElapsedTime = TimeSpan.FromTicks(333333);

            // バックバッファサイズの設定
            this.graphics.PreferredBackBufferWidth = 480;
            this.graphics.PreferredBackBufferHeight = 800;

            // フルスクリーン表示
            this.graphics.IsFullScreen = true;
#endif
        }

        /// <summary>
        /// ゲームが始まる前の初期化処理を行うメソッド
        /// グラフィック以外のデータの読み込み、コンポーネントの初期化を行う
        /// </summary>
        protected override void Initialize()
        {
            // TODO: ここに初期化ロジックを書いてください

            // コンポーネントの初期化などを行います
            base.Initialize();
        }

        /// <summary>
        /// ゲームが始まるときに一回だけ呼ばれ
        /// すべてのゲームコンテンツを読み込みます
        /// </summary>
        protected override void LoadContent()
        {
            // テクスチャーを描画するためのスプライトバッチクラスを作成します
            this.spriteBatch = new SpriteBatch(this.GraphicsDevice);

            Texture2D texture = this.Content.Load<Texture2D>("Texture");
            SpriteFont font = this.Content.Load<SpriteFont>("Font");
            Model xModel = this.Content.Load<Model>(@"XModel");
        }

        /// <summary>
        /// ゲームが終了するときに一回だけ呼ばれ
        /// すべてのゲームコンテンツをアンロードします
        /// </summary>
        protected override void UnloadContent()
        {
            // TODO: ContentManager で管理されていないコンテンツを
            //       ここでアンロードしてください
        }

        /// <summary>
        /// 描画以外のデータ更新等の処理を行うメソッド
        /// 主に入力処理、衝突判定などの物理計算、オーディオの再生など
        /// </summary>
        /// <param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
        protected override void Update(GameTime gameTime)
        {
            // Xbox 360 コントローラ、Windows Phone の BACK ボタンを押したときに
            // ゲームを終了させます
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            {
                this.Exit();
            }

            // TODO: ここに更新処理を記述してください

            // 登録された GameComponent を更新する
            base.Update(gameTime);
        }

        /// <summary>
        /// 描画処理を行うメソッド
        /// </summary>
        /// <param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
        protected override void Draw(GameTime gameTime)
        {
            // 画面を指定した色でクリアします
            this.GraphicsDevice.Clear(Color.CornflowerBlue);

            // TODO: ここに描画処理を記述します

            // 登録された DrawableGameComponent を描画する
            base.Draw(gameTime);
        }
    }
}