メッシュの大きさを得る


Boundsでメッシュの大きさの情報を得る


Bounds bounds = item.GetComponent<MeshFilter>().mesh.bounds;

MeshFilterオブジェクトは簡易に得るメンバーが無いのでGetComponent()で得る必要がある
勿論、アイテム側に該当オブジェクトが含まれている必要がある
(普通に作業していれば他の3Dソフトから出力したものをプレハブ化したものにこれが必ずある)



コレクション内ですべての大きさを内包するBoundsを得る方法


  Bounds maxBounds = new Bounds(Vector3.zero,Vector3.zero);
   foreach (MikuPeiceCtrl item in myPeices) {
       Bounds bounds = item.GetComponent<MeshFilter>().mesh.bounds;
       maxBounds.Encapsulate(bounds);
   }

Encapsulate()関数で可能となる

BoundsからVector3で大きさを得るには


maxBounds.size

sizeメンバーでVector3の情報を得る事ができる。これは例えば元のBoundsの3倍の大きさのBoundsを得たい場合などに利用できる

Bounds newBound = new Bounds(Vectro3.zero, maxBounds.size * 3);

これをY軸だけ3倍したいなら

Bounds newBound = new Bounds(Vectro3.zero, new Vector3(maxBounds.size.x,maxBounds.size.y * 3,maxBounds.size.z);

になる



サンプル1


using UnityEngine;
using System.Collections;

public class bounds : MonoBehaviour {
  
   Bounds myBounds;
   
   // Use this for initialization
   void Start () {
       myBounds = GetBound();
       print(myBounds);
       print(myBounds.max);
       print(myBounds.min);
   }
   
   // Update is called once per frame
   void Update () {
   
   }
   
   //ギズモ表示 
   void OnDrawGizmos(){
       Gizmos.color = Color.white;
       Gizmos.DrawWireCube(this.transform.position + myBounds.center , myBounds.size);
   }
   
   
   //メッシュ形状からboundsを得る
   private Bounds GetBound(){
       Bounds bounds = this.GetComponent<MeshFilter>().mesh.bounds;
       //bounds.center = Vector3.zero;
       return bounds;
   }
}

メニュー



  • 最終更新:2014-06-13 12:03:25

このWIKIを編集するにはパスワード入力が必要です

認証パスワード