using UnityEngine;
using System.Collections;
publicclass Utility {
///<summary>/// Correct the position of the ui object to the specified 3D position in scene. ///</summary>publicstaticvoidScenePositionToUIPosition( Camera sceneCamera,
Camera uiCamera,
Vector3 posInScene,
Transform uiTarget){
Vector3 viewportPos = sceneCamera.WorldToViewportPoint( posInScene );//unify the position to viewport point.
Vector3 worldPos = uiCamera.ViewportToWorldPoint( viewportPos );
uiTarget.position = worldPos;//set world position.
Vector3 localPos = uiTarget.localPosition;
localPos.z = 0f;//ignore z axis offset.
uiTarget.localPosition = localPos;//correct the local position of the ui target.
}
///<summary>/// Correct the position of the ui object to the specified 3D position in scene. ///</summary>publicstaticvoidScenePositionToUIPosition( Camera sceneCamera,
Camera uiCamera,
Vector3 posInScene,
Transform uiTarget,
Vector2 offset){
ScenePositionToUIPosition( sceneCamera, uiCamera, posInScene, uiTarget );
uiTarget.localPosition += (Vector3)offset;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
例子
我们希望UI 随着球体运动而运动,且在球体上方偏移一定长度。
using UnityEngine;
using System.Collections;
publicclass Test : MonoBehaviour {
public Camera UICamera;
public Camera SceneCamera;
public Transform TargetSceneObj;
public Transform TargetUIObj;
// Update is called once per framevoid Update () {
Utility.ScenePositionToUIPosition( SceneCamera,
UICamera,
TargetSceneObj.position,
TargetUIObj,
new Vector2(0, 30f) );
}
}