码迷,mamicode.com
首页 > 其他好文 > 详细

Camera.main.WorldToScreenPoint注意事项

时间:2016-03-07 12:12:20      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

背景:

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);
            });
            
        }

     

Camera.main.WorldToScreenPoint注意事项

标签:

原文地址:http://www.cnblogs.com/xuanll/p/5249805.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!