0

マインクラフトのような 2D ゲームを作っていますが、ブロック テクスチャを 1 つのチャンクで変更する以外は問題ないようです。これは私がスプライトを変更しようとする方法です:

var block = new GameObject("blok", typeof(SpriteRenderer), typeof(BoxCollider2D), typeof(CircleCollider2D));
block.GetComponent(SpriteRenderer).sprite = Sprite.Create(Resources.Load("/Prefabs/Blokovi/blok_zemlja") as Texture2D, Rect(0, 240, 16, 16), Vector2(0.5, 0.5), 16);

効果がありません、なぜですか?

PS UnityScript/JavaScript を使用しています。

前もって感謝します!

4

2 に答える 2

0

新しい空のゲームオブジェクトを作成するために Instantiate() を使用する必要はありません。コンストラクターのみを使用して、これを正しく行っています。新しいコンポーネントでゲームオブジェクトを設定するには、型をコンストラクターに入れる代わりにAddComponent()メソッドを使用してみてください。このメソッドの戻り値の型は Component であるため、追加したばかりのコンポーネントへの参照を簡単に取得できます。小さな例:

var block = new GameObject("block");
block.AddComponent("BoxCollider2D");
block.AddComponent("CircleCollider2D"); 
var spriteRenderer = block.AddComponent("SpriteRenderer");
spriteRenderer.sprite = Sprite.Create(Resources.Load("/Prefabs/Blokovi/blok_zemlja") as Texture2D, Rect(0, 240, 16, 16), Vector2(0.5, 0.5), 16);
于 2015-02-03T15:29:47.530 に答える
0

「blok」という名前のタグを追加して GameObject をブロックし、for ループを追加してブロックの種類ごとにスプライトを変更することで問題を解決しました (タグ「blok」のゲームオブジェクト)。ループコードは次のとおりです。

    var go_list = GameObject.FindGameObjectsWithTag ("blok");

    for (var object in go_list) {
    }
于 2015-02-04T09:54:32.380 に答える