Unity Camera.main.WorldToScreenPoint注意事項


背景:

AR卡項目中,需要在識別出的模型上加上升級時粒子效果,需要在生成模型的位置最上層出粒子效果。

然后粒子飛向進度條,實現升級。

 

關鍵方法及注意事項:

Camera.WorldToScreenPoint Unity官方文檔

  1. 該方法轉換后得到的是屏幕坐標,不是Script中能直接用的坐標;
  2. 在1024×768的設備中,轉換得到的坐標范圍是從屏幕左下角的(0,0)到屏幕右上角的(1024,768);
  3. 如果需要在Unity腳本中使用,參考以下內容...

  • 可以看到,這里是按照2046×1536來根據設備進行縮放的;
  • 根據以上第二點,新建UGUI的一個RectTransform,按對左下角對其;  
  •     //根據Canvas的設置,轉換出uGUI可使用的坐標
       public Vector2 GetUIPosByScreen(Vector2 screenPos) { Vector2 v = Vector2.zero; v.x = screenPos.x * 2048f/Screen.width; v.y = screenPos.y * 1536f/Screen.height; return v; }

     

  • 最后使用Instantiate結合DoTween動態載入粒子系統並做動畫
    public void PlayLevelUpAnimation(Vector2 v)
        {
            Debug.Log("v: " + v);
    
            Card.anchoredPosition = GetUIPosByScreen(v);
    
            GameObject levelUpParticle = Instantiate(Resources.Load("FX/LevelUp/E_Candel_B") as GameObject);
    
            levelUpParticle.transform.SetParent(Card);
            levelUpParticle.transform.localPosition = new Vector3(0f, 0f, -45f);
    
            Card.gameObject.SetActive(true);
    
            Tweener moveChou = Card.DOLocalMove(expSlider.transform.localPosition, 6.2f);
    
            moveChou.OnComplete(()=>{
    
                Card.gameObject.SetActive(false);
            });
            
        }

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM