Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- c#기초문법
- 스파르타
- c#코테
- c#
- 유니티서바이벌게임만들기
- 유니티3dui
- 티스토리챌린지
- 유니티공부
- 유니티게임만들기
- 오블완
- unity3dservival
- unity3d
- 유니티
- c#코딩기초트레이닝
- unity3d게임만들기
- C#문법
- 시샵문법
- unity게임만들기
- c# c#프로그래머스
- unity게임
- Console.WriteLine
- Unity
- 유니티상호작용
- c#기본문법
- c#문제
- 시샵
- 스파르타코딩클럽
- c# 백준
- c#프로그래머스기초문법
- unity공부
Archives
- Today
- Total
나 개발자 진짜 되냐?
[ Unity 3D 서바이벌 게임 만들기 11 ] 사운드 및 뮤직 존 생성 본문
진짜 마지막으로
사운드
함께 보시죠!
스크립트를 만들어보자
Palyer에 FootSteps을 만들자!
만들고 Player 오브젝트에 와서
두개 추가!
< FootSteps.cs >
using UnityEngine;
public class FootSteps : MonoBehaviour
{
public AudioClip[] footstepClips; //오디오 소리를 모아두는 클립
private AudioSource audioSource; // 오디오소스컴포넌트
private Rigidbody _rigidbody; // 발자국이니 중력
public float footstepThreshold; // rigidbody가 쓰이는지 아닌지 받아오는 값
public float footstepRate; // 간격
private float footStepTime; // 시간받아서
private void Start()
{
_rigidbody = GetComponent<Rigidbody>(); // 컴포넌트 캐싱
audioSource = GetComponent<AudioSource>();
}
private void Update()
{
if (Mathf.Abs(_rigidbody.velocity.y) < 0.1f) // 절대값 찾기 = 땅에 붙어있다.
{
if (_rigidbody.velocity.magnitude > footstepThreshold) // 벡터3의 변화량의 크기값 > 미리 설정 값
{
if (Time.time - footStepTime > footstepRate) // 시간을 재준다.
{
footStepTime = Time.time; //시간을 현재시간으로
audioSource.PlayOneShot(footstepClips[Random.Range(0, footstepClips.Length)]); // 오디오 실행
// OneShot을 각각의 리소스들이 끊기지 않고 이어지게끔 [ 랜덤값 추출, 길이만큼]
}
}
}
}
}
변수 선언
Start에서는 일단 get 해주고
Update에서 값을 움직이도록 설정한다.
다음에
유니티로 돌아와서
스크립트에 값 쓰고
여기 클립에
오디오를 넣어주어야 하는데
검색에다가 grass 하면
다섯 개가 나온다.
플레이어 오면
인스펙터창 오른쪽에 자물쇠 있는데 그 부분을 잠가주고
시작하자!
( 움직이지 않게 )
다음에 블록 씌워서 한꺼번에 넣기!
넣을 때 여기 칸에 넣지 말고
Clips 여기 글씨에 넣으면 잘 들어가진다.
자 다음은
음악이 흘러나올 곳 스크립트도 짜보자
만들고
빈오브젝트도 하나 만들어서
설정!
자, 코드 작성해 보자
< MusicZone.cs >
using UnityEngine;
public class MusicZone : MonoBehaviour
{
public AudioSource audioSource; //오디오 소스
public float fadeTime;
public float maxVolume;
private float targetVolume;
private void Start()
{
targetVolume = 0.0f; // 일단 볼륨 0
audioSource = GetComponent<AudioSource>();
audioSource.volume = targetVolume; //그리고 일단 0으로 맞추고
audioSource.Play(); // 노래를 재생시켜놓는다.
}
private void Update()
{ // Approximately는 소수점 연산에서 아주 미세하게 다룰 수 있는 친구
if (!Mathf.Approximately(audioSource.volume, targetVolume)) //근사값이 아닐때
{ // 그때그때 오디오 소스의 볼륨값과 타겟볼륨값이 바뀔때마다 if문의 실행여부 결정
audioSource.volume = Mathf.MoveTowards(audioSource.volume, targetVolume, (maxVolume / fadeTime) * Time.deltaTime);
//MoveTowards 는 점진적으로 증가!
}
}
private void OnTriggerEnter(Collider other) //아까 트리거 채크한거!
{
if (other.CompareTag("Player")) // 플레이어가 들어오면
targetVolume = maxVolume; // 최대 볼륨으로!
}
private void OnTriggerExit(Collider other)
{
if (other.CompareTag("Player")) //나간게 플레이어면
targetVolume = 0.0f; // 소리 끄기
}
}
변수
일단
처음부터 음악을 계속 켜둔다
단지 소리 볼륨을 끌뿐..
근삿값이 아니면
실행되며
여기서 fadeTime이 만약에 2초라면
2만큼 점진적으로 커지면 너무 커질 수 있다.
그래서 max를 나눠서 천천히
점진적으로 올라갈 수 있게 해 준다.
그리고
지금은 소리가 꺼져있으니
사람이 오면 다시 키도록 만든다.
사람이 오면..?
Trigger!!
자 이제 유니티로 가서
해주면
노래가 들렸다가 작아졌다가 루룰랄라 된다.
호옥시 안된다!
palyer 태그를 다시 보자
나는 player가 아니어서 계속 소리가 안 들렸었다..!!
이렇게
멀미 왕의
3D게임
- 완 -
'유니티를 공부해봐요! > 중급이에요!' 카테고리의 다른 글
[ 11月 5日 ] 오늘 내가 배운 것 _ 36日次 (2) | 2024.11.05 |
---|---|
[ Unity 3D 서바이벌 게임 만들기 10 ] 적 생성과 로직 (2) | 2024.11.02 |
[ Unity 3D 서바이벌 게임 만들기 9 ] 스태미나 구현 (0) | 2024.10.29 |
[ Unity 3D 서바이벌 게임 만들기 8 ] 자원 캐기 (0) | 2024.10.29 |
[ Unity 3D 서바이벌 게임 만들기 7 ] 아이템 장착 그리고 공격 (1) | 2024.10.29 |