之前一直用NGUI HUD Text插件做这个功能,感觉一个小功能就导一个插件进来简直丧心病狂。然后就自己写了一个~思路和插件的方式大同小异。但是呀但是呀~我的这小思路看起来绝对比插件的方便啊~因为呀因为呀,我的就这一个功能啊~
小二,上代码~~~
Camera cam;//用于发射射线的相机 Camera UIcam;//UI层的相机 Vector3 mp;//鼠标位置 Transform targetTransform;//点选的物体 public UILabel Lab; void Start () { cam =this.GetComponent<Camera>(); UIcam = GameObject.Find("Camera").GetComponent<Camera>(); Lab = GameObject.Find("Label").GetComponent<UILabel>(); } void Update() { if (TarRaycast()) //判断鼠标是否指在某物体上 { //这里转换坐标的时候我用的是“指定物体y轴方向向上0.3f处”,当然只是大体保证了匹配位置,最好的方式是手动指定,即提前手动拖一个空物体至“有需要点击的物体”下,固定其合适位置,然后坐标用这个空物体的~ Vector3 pos = cam.WorldToViewportPoint(targetTransform.position + new Vector3(0, targetTransform.localScale.y / 2 + 0.3f, 0)); Lab.transform.position = UIcam.ViewportToWorldPoint(pos); Lab.text = targetTransform.name; } } //射线检测部分,不懂可看我之前的文章~ public bool TarRaycast() { Lab.text = null; mp = Input.mousePosition; targetTransform = null; if (cam != null) { RaycastHit hitInfo; Ray ray = cam.ScreenPointToRay(new Vector3(mp.x, mp.y, 0f)); if (Physics.Raycast(ray.origin, ray.direction, out hitInfo)) { targetTransform = hitInfo.collider.transform; return true; } } return false; } }
时间: 2024-10-09 11:25:48