📅  最后修改于: 2023-12-03 15:08:16.699000             🧑  作者: Mango
在游戏制作过程中,我们经常需要将 UI 元素跟随某个游戏对象移动,例如玩家头像随着角色的移动而移动。本文将介绍如何使用 C# 实现这一功能。
创建一个 UI 元素,例如一个 RawImage。
在 Canvas 上创建一个新的 UI 元素,将该元素作为 RawImage 的父级。
在场景中创建一个游戏对象,并将其作为 RawImage 父级的子对象。
在 C# 脚本中,添加以下代码:
public class FollowObject : MonoBehaviour
{
public Transform target; // 目标对象
private RectTransform rectTransform;
private Camera mainCamera;
private void Awake()
{
rectTransform = GetComponent<RectTransform>();
mainCamera = Camera.main;
}
private void LateUpdate()
{
if (target != null)
{
// 将目标对象在世界坐标系中的位置转换为 UI 坐标系中的位置
Vector2 screenPos = mainCamera.WorldToScreenPoint(target.position);
RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform.parent.GetComponent<RectTransform>(), screenPos, mainCamera, out Vector2 localPos);
// 更新 UI 元素的位置
rectTransform.localPosition = localPos;
}
}
}
将该脚本组件挂载到 RawImage 对应的游戏对象上。
在 Inspector 视图中,将 target 字段指定为目标游戏对象。
这段代码中,我们使用了 LateUpdate() 方法来更新 UI 元素的位置。这是因为 LateUpdate() 方法在每一帧渲染完成后才会被调用,能够确保 UI 元素已经更新完毕。
在 LateUpdate() 方法中,我们通过 Camera.WorldToScreenPoint() 方法将目标对象在世界坐标系中的位置转换为 UI 坐标系中的位置。接着使用 RectTransformUtility.ScreenPointToLocalPointInRectangle() 方法将 UI 坐标系中的位置转换为本地坐标系中的位置,再将这个位置赋值给 UI 元素的 localPosition 属性,即可实现 UI 元素跟随游戏对象移动。
通过本文的介绍,您已经学会了如何使用 C# 实现 UI 元素跟随游戏对象移动的功能。希望您能够在游戏制作中灵活应用这一技术,为您的游戏增添更多的色彩!