Unity3D 2D入門——sprite尺寸、獲取對象

先介紹一個鏈接,喫豆人的:

http://forum.china.unity3d.com/thread-13546-1-1.html




關於地圖的製作,我只想記錄一個關於尺寸的獲取方式

(1)位置(未測):

          假設從根級(也就是場景級別)到腳本所在的級別爲

          Background -> Deck -> Target

          腳本被附在 Target 對象上,那麼腳本中用以下代碼獲取 Target 的位置(理論上是這樣,未實測,在實際使用過程中發現,Unity應該是先完成了縮放、旋轉以後,再進行移動作爲最後一步)

Vector3 posTarget = transform.localPosition
                                  + transform.parent.localPosition
                                  + transform.parent.parent.localPosition;

(2)尺寸:

         這裏假設腳本所在的對象爲場景級別,也就是根級別。由於我們使用的是 Sprite 完成 2D 元素的表示,那麼與 3D 不同,稍微麻煩。有兩種方式來獲取尺寸:

          1)利用碰撞體獲取(未測):

                創建一個 BoxCollider2D, 然後用如下代碼獲取(未測試,此法爲各個博客蒐集的,而我不想手動創建那麼多碰撞體,因 

                爲我的地圖採用的是尋址方式,而不是碰撞檢測方式)

Vector2 sizeBox = GetComponent<BoxCollider2D>().size;
          2)直接利用Sprite獲取(親測):
                這也是博主使用的方式,需要使用物體的縮放因子以及sprite的Bound,

                通過此方式獲取的尺寸與 localPosition 中的位置是相對應的(位置在0~1的物體尺寸爲1),實現代碼如下

float x = transform.localScale.x * GetComponent<SpriteRenderer>().sprite.bound.size.x;

(20161113新增:transform.localScale使用的是本地的縮放因子,也是本人的場景需求。transform.lossyScale可以獲取世界座標系下的縮放因子,以適應世界座標系下的尺寸)


獲取對象的方法(只提供親測的方式)

(1)獲取當前對象的子對象

Transform walls = transform.Find("Walls");
(2)獲取同級別的對象(測試條件:腳本對象以及目標對象均爲場景級別對象)

GameObject go = GameObject.Find("Hand");








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章