2016-05-07 6 views
3

私はあなたのプレーヤーを攻撃する敵をランダムに作成するスクリプトを使用しています。私はする必要がこれを行うにはSpriteRenderer名を追加し、ゲームオブジェクトにを挿入し、それ、その後、資産であるテクスチャにそれを与えます。Unityランタイムのスプライトレンダラーでスプライトを変更しました

GameObject sprGameObj = new GameObject(); 
sprGameObj.AddComponent<SpriteRenderer>(); 
sprGameObj.name = "Enemy"; 

sprGameObj.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("EnemyImage"); 

コードは、ゲームオブジェクトを挿入し、それはしかし、スプライトに画像「EnemyImage」を追加していないスプライトレンダラと名前を追加します。

は、ここに私のコードです。私はオンラインで見ましたが、他の人は私と同じようなコードを使っていますが、どちらもうまくいきません。

解決策を知っている人はいますか?

私はC#でコーディングしています。


更新:

私は、既存のスプライトの内側にこのコードを入れてみました、それはちょうどそれがイメージの削除:

gameObject.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("EnemyImage"); 

は画像自体に問題があるだろうか?

答えて

2

最初に、あなたの資産を整理し、名前に依存しない保存のために何らかの設定オブジェクトを使用することをお勧めします。その場合は、使用しているすべてのグラフィックファイルをその設定に登録して、たとえば 'Config.SpritesData.GetEnemySprite(EnemyType.Orc)'のようなものを呼び出すことで、必要なアセットを取得できます。 しかし、Resources.LoadはResourcesフォルダ内のファイルのみで動作するため、Assetsフォルダ内のスプライトのパスを確認することから始めることができます。 Load <>()メソッドがSpriteにキャストしているため、パスが正しい場合はアセットのインポートタイプもチェックする必要があります。そのため、アセットがスプライトとしてインポートされていない場合はキャスト結果がnullになることがあります。 この2つのことを確認してもまだ動作していない場合は、もう少し考えてください。

+0

ファイルパスに問題がある可能性があります。 「assets/EnemyImage」のようなものを使ってみることができますか? – Andrew

+0

ご協力ありがとうございます。アセットフォルダが「リソース」フォルダであり、そこにイメージを置いていると思ったことに気付きました。私はリソースが資産を意味すると思った。この問題を解決するために、私は自分のイメージをresourcesという名前のフォルダに入れました。ご協力ありがとうございました。私は次回にこのような簡単な間違いをしないようにします。 – Andrew

+1

別のヘッドアップ: 'Resources.Load <>()'は、単一に設定されたスプライトに対してのみ機能します。複数に設定されているものがあれば 'Resources.LoadAll <>()'を使う必要があります。 –

関連する問題