유니티 Audio Mixer 사용방법
Audio Mixer란?오디오 소스에 대한 제어, 균형 및 동적 조정을 제공하여 리소스 사용을 최적화하여 게임을 즐기는 유저의 오디오 경험을 향상시킬 수 있습니다.Audio Mixer를 사용해야 하는 이유오디
wlsdn629.tistory.com
오디오 제어를 위한 오디오 믹서
더보기
using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using Random = UnityEngine.Random;
public class CharacterMovement : MonoBehaviour
{
[SerializeField] private Transform targetPointA;
[SerializeField] private Transform targetPointB;
[SerializeField] private GameObject speechBubble;
[SerializeField] private float speed = 75f;
[SerializeField] private float idleTime = 2f;
private bool isMovingRight = true;
private Animator animator;
public TextMeshProUGUI speechText;
private readonly string[] messages = { "안녕하세요!", "반가워요", "여기 어때요?" };
private readonly int idleHash = Animator.StringToHash("Idle");
private readonly int walkHash = Animator.StringToHash("Walk");
private void Awake()
{
animator = GetComponent<Animator>();
animator.SetTrigger(walkHash);
speechBubble.SetActive(false);
}
void Update()
{
if(speed > 0) CharacterMove();
}
void CharacterMove()
{
if (speed <= 0) return;
if (isMovingRight) //오른쪽 이동중일경우
{
// 우측 이동
transform.position = Vector3.MoveTowards(transform.position, targetPointB.position, speed * Time.deltaTime);
if (transform.position.x >= targetPointB.position.x)
{
isMovingRight = false;
StartCoroutine(CharacterIdle());
}
}
else // 왼쪽이동일경우
{
transform.position = Vector3.MoveTowards(transform.position, targetPointA.position, speed * Time.deltaTime);
if (transform.position.x <= targetPointA.position.x)
{
isMovingRight = true;
StartCoroutine(CharacterIdle()); // 이동 멈춤
}
}
transform.localScale = isMovingRight ? new Vector3(1, 1, 1) : new Vector3(-1, 1, 1); // 오른쪽, 왼쪽방향
// text 참조해서 flip 고정 MATHF.ABS
//speechText.transform.localScale = isMovingRight ? new Vector3(1, 1, 1) : new Vector3(-1, 1, 1);
Vector3 speechTextscale = speechText.transform.localScale;
speechTextscale.x = Mathf.Abs(speechTextscale.x) * (isMovingRight ? 1 : -1);
speechText.transform.localScale = speechTextscale;
}
IEnumerator CharacterIdle()
{
speed = 0;
animator.SetTrigger(idleHash);
string randomMessage = messages[Random.Range(0, messages.Length)];
speechText.text = randomMessage;
speechBubble.SetActive(true);
yield return new WaitForSeconds(idleTime);
speechBubble.SetActive(false);
speed = 75f;
animator.SetTrigger(walkHash);
}
}
transform.position = Vector3.MoveTowards(transform.position, targetPointB.position, speed * Time.deltaTime);
MoveTowards를 통해서 Target A, B사이를 왔다갔다 하면서 말을 하는 캐릭터 컨셉.
Vector3 speechTextscale = speechText.transform.localScale;
speechTextscale.x = Mathf.Abs(speechTextscale.x) * (isMovingRight ? 1 : -1);
speechText.transform.localScale = speechTextscale;
캐릭터 위치 전환에 따라 flip 값이 바뀌므로 Mathf.abs를 통해 절대값으로 고정
rivate readonly string[] messages = { "안녕하세요!", "반가워요", "여기 어때요?" };
string 배열을 통해 대화메시지를 설정하고
string randomMessage = messages[Random.Range(0, messages.Length)];
0부터 메시지 배열 길이만큼 랜덤으로 설정된 메시지 호출
'개발일지 > 최종프로젝트' 카테고리의 다른 글
240110(금) [JSON 활용 대화 데이터, 2D 모닥불 만들기, 플레이어 위치에 따른 빛 조절] (0) | 2025.01.10 |
---|---|
241227(금) [반짝이는 효과] (0) | 2024.12.27 |
241226(목) [사운드 구현하기] (0) | 2024.12.26 |
241224(화) [Light2D, Sorting Group, 공격모션 수정] (0) | 2024.12.24 |
241220(금) [플레이어 상태 및 UI(HP 체력)] (0) | 2024.12.20 |