csharp 在3D中显示播放器上方的健康栏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp 在3D中显示播放器上方的健康栏相关的知识,希望对你有一定的参考价值。

Structure:

    Canvas:
    ↳ ...
    ↳ BarContainer - UI.Image:
        * Image: the container, set it to whatever color and size you need
        * HealthLevelAbovePlayer: the script
      ↳ Bar - UI.Image:
        * The actual bar, set the color and height to whatever and the position to (0,0)
          As long as the height is less than the Container's, it will be automatically 
          centered by the script
          
Don't forget to change the `GetHealth` method in the script to update the size of the level.
using UnityEngine;
using UnityEngine.UI;

public class HealthLevelAbovePlayer : MonoBehaviour
{
    private Image[] images;
    private RectTransform levelRectTransform;
    private RectTransform containerRectTransform;

    private float displayFactor;

    private Vector3 levelSize;
    private GameObject player;
    private Vector3 offsetTop;
    private float offsetYTop = .4f;

    void Start()
    {
        containerRectTransform = GetComponent<RectTransform>();
        levelRectTransform = GetComponentsInChildren<RectTransform>()[1];
        player = GameObject.FindGameObjectWithTag("Player");
        images = GetComponentsInChildren<Image>();

        float insets = (containerRectTransform.rect.height - levelRectTransform.rect.height);
        displayFactor = (GetComponent<RectTransform>().rect.width - insets) / 100f;

        levelSize = levelRectTransform.sizeDelta;
        offsetTop = new Vector3(0.0f, player.GetComponent<CapsuleCollider>().height + offsetYTop, 0.0f);

        // add offsets to level bar (for this to work, level must be at position 0,0 in editor)
        insets /= 2f;
        levelRectTransform.localPosition = levelRectTransform.localPosition + new Vector3(insets, -insets, 0);
    }

    void Update()
    {
        float health = GetHealth();
        levelSize.x = health * displayFactor;
        levelRectTransform.sizeDelta = levelSize;

        Vector3 worldPosition = player.transform.position + offsetTop;
        containerRectTransform.position = Camera.main.WorldToScreenPoint(worldPosition);
    }

    float GetHealth()
    {
        // TODO
        return 0f;
    }


    // use this to show/hide the health bar
    void toggleDisplay(bool show)
    {
        foreach (Image image in images)
        {
            image.enabled = show;
        }
    }

}

以上是关于csharp 在3D中显示播放器上方的健康栏的主要内容,如果未能解决你的问题,请参考以下文章

csharp Unity3d在IOS和Android上播放视频

带有 SwiftUI 的标签栏上方的额外导航视图

Unity3d - RPG项目学习笔记(二十五)

csharp 从Unity3D中的CoherentUI浏览器获取PCM音频数据,并通过Unity音频过滤器播放。

在状态栏上方显示视图?

android沉浸式状态栏变色状态栏透明状态栏修改状态栏颜色及透明