NPC血条优化

--判断血条是否在屏幕中

public bool IsInView(Vector3 worldPos)
     {
         Transform camTransform = Camera.main.transform;
         Vector2 viewPos = Camera.main.WorldToViewportPoint (worldPos);
         Vector3 dir = (worldPos - camTransform.position).normalized;
         float dot = Vector3.Dot (camTransform.forward, dir);//判断物体是否在相机前面
 
         if (dot > 0 && viewPos.x >= 0 && viewPos.x <= 1 && viewPos.y >= 0 && viewPos.y <= 1)
             return true;
         else
             return false;
     }
 
     void Update () 
     {
         Vector2 vec2 = Camera.main.WorldToScreenPoint (this.gameObject.transform.position);
 
         if (IsInView (transform.position)) 
         {
             rectBloodPos.gameObject.SetActive (true);
             rectBloodPos.anchoredPosition = new Vector2 (vec2.x - Screen.width / 2 + 0, vec2.y - Screen.height / 2 + 60);
         }
         else
             rectBloodPos.gameObject.SetActive (false);
     }

第二种:通过monoBehaviour来判断

void OnBecameVisible(){
//可见状态下你要执行 的东西
}
void OnBecameInvisible(){
//不可见状态下你要执行的东西
}

猜你喜欢

转载自my.oschina.net/u/698044/blog/1789787