오늘도 즐거운 유니티 공부 시간이다
구현될 기능은 음성 재생, 날짜 얻기, 저장 기능이다.
늘 그렇듯, 새로운 프로젝트 - 유니티짱 임포트로 시작한다
유니티짱 프리팹을 넣은 뒤
Camera - Clear Flags - Soild color
카메라 위치를 유니티짱 앞으로 조정 해준다
유니티짱의 기본 스크립트는 사용하지 않으니 전부 꺼준다
날짜같은 데이터 값을 가져오기 위한 스크립트를 짜보자
이름은 DataManager이다
이제 일자를 가져오는 코드를 작성한다
private System.DateTime _now;
private int _nowMonth;
private int _nowDay;
void Start()
{
_now = System.DateTime.Now;
_nowMonth = _now.Month;
_nowDay = _now.Day;
}
유니티에는 System.DateTime이라는 구조체가 있어서, 년도 월 등 시간과 관련된 자료를 담을 수 있다
여기에 음성을 재생하는 기능을 추가한다
유니티에서 음성을 재생하기 위해서는
AudioClip과 AudioSource가 필요하다
public AudioClip voice_data0101;
private AudioSource _univoice;
이렇게 변수를 추가해준다
이제 유니티로 돌아가서 유니티짱 프리팹을 확인하면
오디오 파일을 담을 수 있는 Audio Clip이 생긴걸 알 수 있다.
여기에 Audio Source컴포넌트를 추가해준다
이 컴포넌트가 있어야 오디오 파일을 clip에서 가져와 재생할 수 있다
이제 오디오 파일을 다중으로 사용하기 위한 준비를 해보자
만약, 모든 파일을 직접 코드에 넣게될 시, 너무 public로 clip파일을 많이 넣어야 할 것이다
이를 해결하기 위해서 2차원 배열을 사용한다
voice_data0101을
로 변형시켜 준다
ㄴ 1차원 배열로 해도 이후 예제에서 충분하다
이렇게 할시, 한 변수값에 여러개의 파일을 다중으로 넣을 수 있게 된다
참고로 유니티짱에 어떤 보이스 파일이 있냐고 묻는다면....
이런 보이스들이 있다...
그중 1137부터 숫자를 말하는 보이스가 있는데 이를 활용하여 예제를 대충 만들어 보자
1월부터 3월이면 1
4월부터 6월이면 2
7월부터 9월이면 3
10월부터 12월이면 4
(책에서는 뭔가 세세하게 나누어 져있는데, 책에서 보여주는 예제 파일이 현재 유니티짱 에셋에서 누락된 것 같다)
이에 맞추어 코드를 짜보자
전체적인 구조는 게임을 실행하고 마우스를 클릭하면 현재 월에 따라 숫자를 말하게 하려 한다
이 구조에서 사용되는 것은
if Input.Getmousebuttondown(0)로 검사한 뒤
함수 PlayVoice를 실행하고
PlayVoice는 if문으로 현재 월을 검사해서 Sound를 play한다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DataManeger : MonoBehaviour
{
public AudioClip[] voice_data;
private AudioSource _univoice;
private System.DateTime _now;
private int _nowMonth;
void Start()
{
_now = System.DateTime.Now;
_nowMonth = _now.Month;
_univoice = GetComponent<AudioSource>();
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
PlayVoice();
}
}
private void PlayVoice()
{
if (_nowMonth >= 1 && _nowMonth < 4) _univoice.PlayOneShot(voice_data[0]);
else if (_nowMonth >= 4 && _nowMonth < 6) _univoice.PlayOneShot(voice_data[1]);
else if (_nowMonth >= 7 && _nowMonth < 10) _univoice.PlayOneShot(voice_data[2]);
else if (_nowMonth >= 10 && _nowMonth < 13) _univoice.PlayOneShot(voice_data[3]);
}
}
전체적인 스크립트이다
이제 스크립트에서 voice_data에서 +를 눌러서 배열을 늘려준뒤, 각 보이스를 넣어준다
이제 테스트를 해보자
현재 월이 10월이니
에 걸려서 일본어로 4를 발음하게 된다
이제 이를 저장해보자
유니티에서 저장 기능을 구현할때 간단한 방법으로는 유니티 자체에서 제공하는 PlayerPrefs클래스를 사용하는 것이다
함수를 실행할때 현재의 월을 다른 변수에 저장해두었다가 확인하는 방식으로 구현하면 된다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DataManeger : MonoBehaviour
{
public AudioClip[] voice_data;
private AudioSource _univoice;
private System.DateTime _now;
private int _nowMonth;
private int _oldMonth;
void Start()
{
_now = System.DateTime.Now;
_nowMonth = _now.Month;
_univoice = GetComponent<AudioSource>();
}
void Update()
{
if (Input.GetMouseButtonDown(0)) PlayVoice();
else if(Input.GetMouseButtonDown(1))
{
_oldMonth = PlayerPrefs.GetInt("Month");
Debug.Log($"이전 확인 월: {_oldMonth}월");
}
}
private void PlayVoice()
{
if (_nowMonth >= 1 && _nowMonth < 4) _univoice.PlayOneShot(voice_data[0]);
else if (_nowMonth >= 4 && _nowMonth < 6) _univoice.PlayOneShot(voice_data[1]);
else if (_nowMonth >= 7 && _nowMonth < 10) _univoice.PlayOneShot(voice_data[2]);
else if (_nowMonth >= 10 && _nowMonth < 13) _univoice.PlayOneShot(voice_data[3]);
_oldMonth = _nowMonth;
PlayerPrefs.SetInt("Month", _nowMonth);
Debug.Log("현재 월 저장됨");
}
}
최종 코드이다
이때 중요한것은 save - load기능이기에
이 2줄의 코드가 핵심이다
첫번째 줄은 지정한 string에 변수값을 가져와 저장하는 것이고
두번째 줄은 변수에 string에 저장되었던 값을 가져오는 것이다
콘솔에서 저장, 불러오기가 되는 것을 확인할 수 있다
'공부 > 유니티' 카테고리의 다른 글
유니티3D 공부(Part5) 가위바위보 게임 만들기 (0) | 2024.10.03 |
---|---|
유니티3D 공부(Part4) 유니티짱 터치하기, 레이(Raycast)와 충돌처리 (0) | 2024.10.01 |
유니티3D 공부(Part 2) 마우스로 카메라 이동, 회전, 줌 인, 아웃 (1) | 2024.09.29 |
유니티 문제들(움직임, 카메라, 맵핑) - 캐릭터 움직임, 카메라 무빙, 대각선 이동 보정 (1) | 2024.09.27 |
유니티3D 공부(Part 1 - 5, Part 1 END) 씬 전환하기, 타이틀 화면, 승리, 패배 씬 추가 (0) | 2024.09.26 |