5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Spriteを3d空間上の大きさ1にスケールする

Posted at

Spriteを普通に表示すると適当な大きさになり、3D空間上の大きさとどのように対応させればよいかがよくわからなかったのでメモ。

Code

スケールさせるコードはこんな感じ。

// SpriteをPrefabとしてLoad
GameObject prefab = Resources.Load<GameObject> ("Prefabs/Sample");
SpriteRenderer renderer = prefab.GetComponent<SpriteRenderer>();

// 3D空間上に配置した時のサイズ
float sizeX = renderer.bounds.size.x;
float sizeY = renderer.bounds.size.y;

// 空間上で1の大きさになるようにスケールする
float scaleX = 1.0f / sizeX;
float scaleY = 1.0f / sizeY;

// objectを空間上に生成しスケールさせる
GameObject obj = Instantiate(prefab, Vector3.zero, Quaternion.identity) as GameObject;
obj.transform.localScale = new Vector3(scaleX, scaleY, 1.0f);

SpriteRendererのBoundsで配置した時のサイズを取得して、それを元に1の大きさになるようにscale値を決めている。

余談: Pixels Per Unit

pixelperunit.png

SpriteはInspectorのPixels Per Unitという単位で3D空間上の大きさと対応する。
デフォルトだと100なっている。
例えば600x600 pixelのSpriteを3D空間上に配置すると、先ほどのBoundsは6x6の大きさとなるわけだ。

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?