이때까지 모두 작업했던 부분들을 모아 하나의 게임으로 구성하며, 발생하는 버그를 수정하는 작업을 진행했다.
맵을 동적생성하다보니 포탈의 도착지점을 직접 달아줄 수 없어서 포탈 생성 시 코드로 추가해주는 작업을 따로 거쳐야 했다.
var objdoor = Instantiate(obj[blockNum], new Vector3(x, y, z - 0.5f), Quaternion.identity, transform);
if (index == 0)
{
objdoor.AddComponent<PortalBlock>();
objdoor.GetComponent<PortalBlock>().warpPos = new Vector3(12, 16.6f, 3f);
objdoor.GetComponent<BoxCollider>().isTrigger = true;
objdoor.GetComponent<BoxCollider>().size = new Vector3(1,1,30);
}
스크립트를 추가하고 세부 설정을 건드려준다.
추가로 기존에는 Transform을 위치로 사용하였으나, 이 경우에는 초기화를 따로 해줄 수가 없어서 WarpPos를 Vector3로 변경하여 사용하였다.
사라지는 발판은 따로 프리팹으로 만들어서 추가하였다. 포탈처럼 동적으로 만들어주는 것보다 어차피 애니메이션을 따로 지정해주어야하기때문에 프리팹으로 만들어주는 편이 훨씬 용이했다.
너무 허전해보여서 Dotween을 활용해 Start Scene을 구성해주었다.
씬에 들어갈 로고 이미지를 먼저 구성해주고
[SerializeField] private GameObject logo;
[SerializeField] private GameObject Txt;
private void Start() {
logo.transform.DOLocalMove(new Vector3(0, 0), 2).SetEase(Ease.OutBounce).OnComplete(FadeIn);
}
private void FadeIn(){
Txt.GetComponent<TextMeshProUGUI>().DOFade(1, 1f).OnComplete(Done);
}
private void Done() {
gameObject.GetComponent<StartScene>().CanLoad = true;
}
OnComplete를 활용해 Invoke처럼 차례차례 진행할 수 있도록 작성했다.