先介紹一個鏈接,喫豆人的:
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");