[개발일지] 나폴리탄 스파게티 20230611
2023. 6. 11. 17:38ㆍ2학년 1학기 프로젝트

화장실 물소리 이벤트
물이 떨어지는 소리가 들린다면 화장실에서부터 이어지는 액체를 따라 이동하고 삐뚤어진 액자를 올바르게 정리하도록 함
이벤트가 진행되면 액자의 각도가 틀어지도록 함
오브젝트에 AudioSource 컴포넌트 부착하여 주변에서 소리가 들리도록 함
Reverb Zone Mix: 오디오 리스너가 리버브 존 내 어디에 위지해 있는지에 따라 오디오 클립을 왜곡. 즉 높을수록 3D음향에 가까워짐
추가설정
Min Distance: 20
Max Distance: 300
public class WaterSoundEvent : MonoBehaviour
{
public bool event6 = false; // 이벤트 진행 변수
public GameObject soundPlayer; // 물방울 소리를 나도록 할 오브젝트
void Update()
{
if(event6 == true)
{
Event(); // 이벤트 매니저를 통한 이벤트 진행
}
// E키를 누를 경우 그림이 원래대로 돌아옴 (임시)
if(Input.GetKeyDown("e"))
{
Original();
}
}
// 액자 이벤트
void Event()
{
// 물이 떨어지는 소리 재생
soundPlayer.SetActive(true);
// 액자가 삐뚤어지도록 함
gameObject.transform.rotation = Quaternion.Euler(0, 0, 20);
// 액자로 연결되는 액체 생성
}
// 액자가 원래대로 돌아오도록 함
void Original()
{
// 물이 떨어지는 소리 종료
soundPlayer.SetActive(false);
// 액자가 원래대로 돌아옴
gameObject.transform.rotation = Quaternion.Euler(0, 0, 0);
// 이벤트 종료
event6 = false;
}
}
그림 이벤트
(미완성) 모든 그림에서 검붉은 색 액체가 흐르는 이벤트와 그림이 틀어지는 이벤트가 발생할 수 있습니다. 때문에 생성된 그림들 중 이벤트를 진행할 그림을 랜덤으로 뽑아야 합니다. 또한 이미 이벤트가 진행중인 그림에 다른 이벤트가 동시에 진행되면 안되기 때문에 이벤트가 중복되지 않도록 확인하는 기능 작성하였습니다. 기존에 있던 두 스크립트를 이 스크립트 하나로 합치는 작업을 하였습니다.
public class PaintsManager : MonoBehaviour
{
public GameObject[] paints; // 각각의 그림을 받아옴
public GameObject[] twistedPaint; // 변형된 그림들을 받아옴
public GameObject blood; // 피모형을 받아옴
public bool event2 = false; // 이벤트 2진행 변수
public bool event3 = false; // 이벤트 3진행 변수
public bool destroyBlood = true; // 검붉은 액체가 사라지게 할 변수 (수정하기)
int goEvent; // 이벤트를 진행할 그림
int nowEvent2;
int nowEvent3;
int eventType;
// 그림들이 생성될 위치
Vector3[] paintsPositions =
{
new Vector3(5, 2, 1), // 0
new Vector3(10, 2, 1), // 1
new Vector3(15, 2, 1), // 2
new Vector3(20, 2, 1), // 3
};
List<int> nowPaintEvent = new List<int>(); // 이벤트를 진행중인 그림 정보를 저장할 리스트
void Start()
{
// 지정된 위치에 그림을 생성함
for(int i = 0; i < paints.Length; i++)
{
SpawnPaints(paints[i], paintsPositions[i]);
}
}
void Update()
{
// 이벤트 매니저에서 2 true를 받았을 때 (이후 수정할 것)
if(Input.GetKeyDown("n"))
{
EventPaintPick(2);
}
// 이벤트 매니저에서 3 true를 받았을 때 (이후 수정할 것)
if(Input.GetKeyDown("b"))
{
EventPaintPick(3);
}
}
// 그림을 생성함
void SpawnPaints(GameObject paintObject, Vector3 spawnPoint)
{
GameObject paint = Instantiate(paintObject);
paint.transform.position = spawnPoint;
}
// 이벤트를 진행할 그림을 추첨
void EventPaintPick(int a)
{
int paintPick = Random.Range(0, paints.Length); // 여러 그림중 하나를 뽑음
eventType = a;
Check(paintPick);
}
// 이벤트를 진행하기 위해 뽑은 그림이 이벤트 진행중인지 아닌지를 확인
void Check(int checkEvent)
{
bool isThere = nowPaintEvent.Contains(checkEvent); // 중복된 값이 있는지 확인
// 중복값이 있을 경우 재추첨
if(isThere == true)
{
EventPaintPick(eventType);
Debug.Log("값 중복됨");
}
// 중복값 없을 경우 진행 확정
else
{
goEvent = checkEvent; // 진행 확정
nowPaintEvent.Add(goEvent); // 진행중인 물체 정보 리스트에 담음
if(eventType == 2)
{
Event2(goEvent);
}
else
{
Event3(goEvent);
}
}
}
void Event2(int a)
{
nowEvent2 = a;
Transform paintPosition = paints[a].transform ;
GameObject bloodPrefab = Instantiate(blood, paintPosition);
}
// Event2 종료
void Event2End()
{
destroyBlood = true;
event2 = false; // 이벤트 종료
CompleteEvent(nowEvent2);
}
void Event3(int a)
{
nowEvent3 = a;
}
// 이벤트 진행 종료 후 list에 담긴 이벤트 정보 삭제
void CompleteEvent(int completeEvent)
{
int indexCompleteEvent = nowPaintEvent.IndexOf(completeEvent); // List에 저장된 이벤트 종류가 몇번에 저장되어있는지 찾아줌
nowPaintEvent.RemoveAt(indexCompleteEvent); // 완료된 이벤트 정보 제거
}
}
'2학년 1학기 프로젝트' 카테고리의 다른 글
[개발일지] 나폴리탄 스파게티 20230612 ~ 20230617 (0) | 2023.06.23 |
---|---|
[개발일지] 나폴리탄스파게티 20230610 (2) | 2023.06.10 |
[개발일지] 나폴리탄스파게티 20230608 (0) | 2023.06.10 |
[개발일지] 나폴리탄스파게티 20230607 (0) | 2023.06.09 |
[개발일지] 나폴리탄스파게티 20230602 (0) | 2023.06.09 |