Unity開發:血條跟隨的實現
阿新 • • 發佈:2019-02-18
之前在網上看了很多人物血條跟隨的方式,都不是很順手..包括各種偏移的計算啊什麼的都不是很完美,於是仔細去看了一篇RectTransform屬性的詳解,又瞭解了一下座標轉換的原理,最終得到了一個比較完美而且很簡單的方案:
基本實現:
void Start ()
{
Bar = Instantiate(BarPrefab, BarPrefab.transform);
rectBloodPos = Bar.GetComponent<RectTransform>();
rectBloodPos.anchoredPosition = new Vector2 (x, y );//控制偏移量
}
private void Update()
{
Vector2 vec2 = Camera.main.WorldToScreenPoint (this.gameObject.transform.position);
rectBloodPos.anchorMax = Camera.main.ScreenToViewportPoint(vec2);
rectBloodPos.anchorMin = Camera.main.ScreenToViewportPoint(vec2);
}
隨物體縮放的實現
如果只實現上面,那麼血條的大小隻是固定的,如果有多個物體要顯示血條,就需要近大遠小的效果
public GameObject BarPrefab;
public GameObject BarAnchor;
private GameObject Bar;
public float limit;//與攝像頭的距離,超出這個距離就消失
private bool visible;
private void Update()
{
Vector2 vec2 = Camera.main.WorldToScreenPoint (BarAnchor.transform.position);
vec2.y);//控制偏移量
rectBloodPos.anchorMax = Camera.main.ScreenToViewportPoint(vec2);
rectBloodPos.anchorMin = Camera.main.ScreenToViewportPoint(vec2);
float dist = Vector3.Distance(transform.position, CameraAction.instance.camera.transform.position);
if (dist > limit || !visible)
{
Bar.SetActive(false);
}
else
{
Bar.SetActive(true);
}
float one = dist/limit;
float sc = 1.4f - 1f * one;//縮放係數
rectBloodPos.localScale = Vector3.one * sc;
}
private void OnBecameVisible()
{
Debug.Log("Visible");
visible = true;
}
private void OnBecameInvisible()
{
Debug.Log("Invisible");
visible = false;
}
另外第一次接觸
OnBecameInvisible()
這兩個方法的朋友們注意一下,在編輯器模式中需要確保在Game
和Scene
兩個場景下該物體都不可見,以及包含MeshRender
元件才會被呼叫到