본문 바로가기
개발/Unity

Unity) 벌집 모양(Hexagon,HoneyComb)의 체력 게이지 표현

by 테샤르 2024. 6. 21.

벌집 모양(Hexagon,HoneyComb)의 체력 게이지 표현

체력같은 표시를 할때 순차적으로 정렬을 해야하는 경우가 있다.

간단하게 테스트한 코드를 포스팅 한다.

반응형

https://discussions.unity.com/t/is-there-a-way-to-create-a-honeycomb-looking-health-ui-using-layout-components/285183/2

 

처음 0번째 인덱스를 기준으로 번갈아가면서 위치를 추가로 처리하는 간단한 코드로 게임의 체력 게이지나 특별한 갯수를 표현할때 종종 사용 한다.

 

<테스트 코드>

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TestHealth : MonoBehaviour
{
	[SerializeField]
	private Image healthImage = default;

	private int healthCount = 7;

	private float xSpacing => healthImage.rectTransform.sizeDelta.x / 2f;
	private float ySpacing => healthImage.rectTransform.sizeDelta.y / 2f;

	[SerializeField]
	private List<Image> hearts = new List<Image>();

	void Start()
	{
		for (int i = 0; i < healthCount; i++)
			CreateEmptyHeart(i);
	}

	public void CreateEmptyHeart(int _heartIndex)
	{
		Image newHeart = Instantiate(healthImage);
		newHeart.gameObject.SetActive(true);
		newHeart.transform.SetParent(gameObject.transform);
		hearts.Add(newHeart);

		Vector2 prevHeartPos = Vector2.zero; 
		
		Vector2 pos = Vector2.zero;

	

		if (_heartIndex == 0)
			pos = Vector2.zero;
		else
		{
			prevHeartPos = hearts[_heartIndex - 1].transform.GetComponent<RectTransform>().anchoredPosition;

			var xPosition = xSpacing / 2f + 25f; 
			var yPosition = ySpacing * ((_heartIndex % 2 == 1) ? -1 : +1);

			pos = new Vector2(prevHeartPos.x + xPosition, prevHeartPos.y + yPosition);

		}

		newHeart.GetComponent<RectTransform>().anchoredPosition = pos;
		newHeart.transform.localScale = Vector3.one;
	
	}

}

 

 

Is there a way to create a “honeycomb” looking health UI using Layout Components? : [링크]

 

 

 

 

 

★☆☆☆

 

반응형

댓글