요약: 이 섹션에서는 MMFloatingText 시스템을 사용하여 게임 세계에 텍스트를 생성하는 방법을 설명합니다.

테이블 내용
  • 소개
  • 설정
        -  피드백을 통해 플로팅 텍스트를 재생하는 방법 설정

 

소개

 

게임에서 플레이어에게 화면에 특정 위치에서 관련된 값을 전달하고 싶을 때가 자주 있습니다. 예를 들어 데미지 숫자, 생성된 화폐, 또는 텍스트 메시지 등이 될 수 있으며, 이는 여러분의 선택에 달려 있습니다!

Feel은 게임에 만족스러운 플로팅 텍스트를 쉽게 추가할 수 있도록 도와줍니다.

 


설정

 

FeelTactical 데모 씬에서 플로팅 데미지 텍스트의 예제를 찾을 수 있습니다. 데미지 텍스트 피드백에는 MMFloatingTextSpawner가 필요하며, 이 씬에서는 Managers 노드 아래에 각각의 슈터/큐브에 하나씩 총 세 개의 MMFloatingTextSpawner가 있습니다. 각 전술 슈터에는 ShootFeedbacks가 바인딩되어 있으며, 각각의 슈터는 플로팅 텍스트 피드백을 트리거합니다. 각각의 피드백은 특정 채널을 대상으로 하며, 이는 각각의 MMFloatingTextSpawners 중 하나에서 해당 채널과 일치하는 것으로 잡힙니다.

  • 첫 번째 스포너는 매우 기본적인 플로팅 텍스트를 생성합니다.
  • 두 번째 스포너는 생성 시 MMF_Player를 재생하여 회전, 위치, 색상 및 텍스트 간격을 애니메이션화하는 피드백 파워드 텍스트를 생성합니다.
  • 세 번째 스포너는 TextMeshPro 플로팅 텍스트를 생성합니다.

 


피드백을 통해 플로팅 텍스트를 재생하는 방법 설정

  1. Unity 2022.3.23f1(이상)에서 새로운 프로젝트를 생성하고, 패키지 매니저를 통해 Feel v4.1.2(이상)를 가져옵니다.
  2. 빈 씬(또는 기존 씬)에서 새로운 빈 게임 오브젝트를 생성하고, 이름을 "FloatingTextSpawner"로 설정한 후 MMFloatingTextSpawner 컴포넌트를 추가합니다.
  3. 프로젝트 패널에서 MMFloatingText 프리팹을 검색하고, 이를 새로 생성한 스포너의 Pooler 설정에서 PooledSimpleMMFloatingText 슬롯에 드래그합니다.
  4. 새로운 빈 오브젝트를 생성하고, 이름을 "TestPlayer"로 설정한 후 위치를 (0,0,0)으로 설정합니다. 그런 다음, MMF Player 컴포넌트를 추가합니다.
  5. MMF Player 컴포넌트에 새로운 UI > Floating Text 피드백을 추가합니다.
  6. 에디터에서 재생 버튼을 누른 후, MMF Player의 초록색 재생 버튼을 누르면 "100" 텍스트가 매번 생성됩니다.

추가 기능: 강도 제어 추가

  • 더 나아가서, MMF Player의 강도를 피드백에 적용하려면 "use intensity as value" 옵션을 체크할 수 있습니다. 아래 클래스와 같이 프로젝트에 새로운 클래스를 생성하고, 위 단계를 완료한 후 TestIntensityAsValue 컴포넌트를 MMF Player에 추가하세요. 에디터에서 재생 버튼을 누른 후 TriggerFeedback 버튼을 누르면 매번 랜덤한 값이 표시됩니다. 실제 게임에서는 랜덤 값 대신 데미지 값을 전달하고 싶을 것입니다! 값이 반올림되지 않는 것을 알 수 있는데, 이를 변경하려면 Floating Text 피드백에서 반올림 방법을 선택할 수 있습니다.
using MoreMountains.Feedbacks;
using UnityEngine;

public class TestIntensityAsValue : MonoBehaviour
{
    [MMFInspectorButton("TriggerFeedback")]
    public bool TriggerFeedbackButton;
    private MMF_Player _myPlayer;

    private void Start()
    {
        // 시작 시 MMF Player 컴포넌트를 가져옵니다.
        _myPlayer = this.gameObject.GetComponent<MMF_Player>();
    }

    private void TriggerFeedback()
    {
        float randomIntensity = Random.Range(0f, 100f);
        _myPlayer.PlayFeedbacks(this.transform.position, randomIntensity);
    }
}

 

런타임에 값 변경하기

MMF_FloatingText의 Value 속성을 포함한 다른 모든 속성을 동적으로 변경할 수도 있습니다. 아래 예제에서는 값을 랜덤 부동 소수점으로 설정하고 색상을 화려한 그라디언트로 설정합니다.

using MoreMountains.Feedbacks;
using UnityEngine;

public class TestModifyAtRuntime : MonoBehaviour
{
    [MMFInspectorButton("TriggerFeedback")]
    public bool TriggerFeedbackButton;

    private MMF_Player _myPlayer;
    private Gradient gradient;
    private GradientColorKey[] colorKey;
    private GradientAlphaKey[] alphaKey;

    private void Start()
    {
        // 시작 시 MMF Player 컴포넌트를 가져옵니다.
        _myPlayer = this.gameObject.GetComponent<MMF_Player>();
    }

    private void TriggerFeedback()
    {
        float randomValue = Mathf.Round(Random.Range(0f, 100f));
        MMF_FloatingText floatingText = _myPlayer.GetFeedbackOfType<MMF_FloatingText>(); // 플레이어에 하나의 플로팅 텍스트 피드백만 있는 경우 가정, 더 복잡한 방법은 문서 참조

        // 표시 값을 랜덤 값으로 설정합니다.
        floatingText.Value = randomValue.ToString();

        // 화려한 색상을 설정합니다.
        gradient = new Gradient();
        // 색상 키를 상대 시간 0과 1(0% 및 100%)에 설정합니다.
        colorKey = new GradientColorKey[2];
        colorKey[0].color = Color.red;
        colorKey[0].time = 0.0f;
        colorKey[1].color = Color.blue;
        colorKey[1].time = 1.0f;
        // 알파 키를 상대 시간 0과 1(0% 및 100%)에 설정합니다.
        alphaKey = new GradientAlphaKey[2];
        alphaKey[0].alpha = 1.0f;
        alphaKey[0].time = 0.0f;
        alphaKey[1].alpha = 0.0f;
        alphaKey[1].time = 1.0f;
        gradient.SetKeys(colorKey, alphaKey);

        floatingText.ForceColor = true;
        floatingText.AnimateColorGradient = gradient;

        _myPlayer.PlayFeedbacks(this.transform.position);
    }
}

'유니티 에셋 > Feel' 카테고리의 다른 글

MMStateMachine  (3) 2024.07.14
MMSceneLoading  (0) 2024.07.14
MMProgressBar  (1) 2024.07.14
MMRadio  (1) 2024.07.14
MMSequencer  (2) 2024.07.14

+ Recent posts