Camera.main.WorldToScreenPoint注意事项
Posted xGull
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Camera.main.WorldToScreenPoint注意事项相关的知识,希望对你有一定的参考价值。
背景:
AR卡项目中,需要在识别出的模型上加上升级时粒子效果,需要在生成模型的位置最上层出粒子效果。
然后粒子飞向进度条,实现升级。
关键方法及注意事项:
Camera.WorldToScreenPoint Unity官方文档
- 该方法转换后得到的是屏幕坐标,不是Script中能直接用的坐标;
- 在1024×768的设备中,转换得到的坐标范围是从屏幕左下角的(0,0)到屏幕右上角的(1024,768);
- 如果需要在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注意事项的主要内容,如果未能解决你的问题,请参考以下文章