어렵지는 않지만 그래도 적어보자면
public class CrowdMove : MonoBehaviour
{
public GameObject Path;
public Transform[] wayPoint;
int crowdId;
public int index;
NavMeshAgent nav;
Animator anim;
// Start is called before the first frame update
void Start()
{
index = 0;
nav = GetComponent<NavMeshAgent>();
anim=GetComponent<Animator>();
wayPoint=new Transform[Path.gameObject.transform.childCount];
for(int i=0;i<Path.gameObject.transform.childCount;i++)
{
Debug.Log("1");
wayPoint[i]=Path.transform.GetChild(i).transform;
}
}
// Update is called once per frame
void Update()
{
if (Vector3.Distance(transform.position, wayPoint[index].position) > 2.0f)
{
Move();
}
else
{
Debug.Log("인덱스 바뀜");
resetIndex();
}
}
void Move()
{
nav.SetDestination(wayPoint[index].position);
}
void resetIndex()
{
index++;
if (index == wayPoint.Length)
{
index = 0;
}
}
}
특별하게 확인해야할 부분은 없지만 아무래도 CROWD의 개수가 많다보니 TRANSFORM[]을 인스펙터에서 붙여넣는게 아닌, CROWD의 경로 PARENT를 넣으면 TRNANSFORM[]배열에 저장될 수 있도록 했다.
오늘의 계획
(알바 가기 전)
1. timelineTalkable이 true일때도 특정 상황이 아니면 좌클릭으로 guard가 뛰어오지 않도록 하기
첫번째 시간여행 이후 index가 바뀌어 사람들의 대사가 바뀌게 하기
움직이는 crowd한테 말을 걸면 애니메이션 멈추고 navmashagent도 끄기+대화가 끝나면 다시 움직이기-멈추긴 하는데 한번에 정확히 나를 쳐다보지 않음+대화 끝나면 다시 움직여야함
{
해당 타임라인에 해당할 경우, return 값으로 받는 string 배열의 대사파트의 index를 1000+를 시킵니다. 그러면 예시로 id가 1인 crowd는 1001의 대사를 말하게 됩니다. (index가 1001이 되므로)
}
{
다시 움직이는 것은 talkManager에 대화 끝나는 부분에 싱글톤패턴을 이용해 구현
}
{
버그1: 기존 캐릭터가 대화창이 안뜸 -해결
버그2: crowd1에게 한번 더 말을 걸면 대화가 안됨
구현1: 정지된 캐릭터에게 말을 걸고 나면 다시 캐릭터가 대화 전 방향으로 몸 돌리기 구현
}
4. 저녁에 집와서 crowd 경로 추가하기
까먹지 말아야 할 점: 컷씬에서의 대화는 JustTalkManager으로 구현한 딕셔너리 timelineTalkData를 쓰고있으며, 인게임에서 npc와의 대화는 TalkManager로 구현한 딕셔너리 talkData를 쓰고있음. 헷갈리면 안되는 부분이며, 움직이는 npc와 안 움직이는 npc는 스크립트 crowdMove로 나뉜다. (이름도 서로 다름)
기능구현을 못하면 잠에 들지 못하는 병에 걸렸어요..결국 대화가 끝나면 움직이지 않는 npc는 원래 방향을 쳐다보고, 움직이는 crowd1도 완전히 기능 구현에 완료했다. 알바하면서 적은 대화 내용만 옮겨넣자. 현재 timeLine=2는 2000번대의 딕셔너리 index에 구현이 되어있다.