일단 본론부터 이야기하자면
"오브젝트가 극한으로 쌓이면 풀링이던 아틀라스던 배치수 작던 상관없이 렉이 심하냐"는 질문입니다.
일부러 극한으로 몰고 있는데
배치수는 최대 50을 안넘어갑니다.
일단 문제가 몹 너무 많아질때, 모든 몬스터에게 단일공격 스킬 쓸때, 그리고 경험치 자석으로 너무 많이 빨아들일때가 대표적인데
요거 못잡으면 개발 접어야된다는 생각 하고 있습니다. 이거 잡을 아이디어나 방법 있을까요?
진정 어쩔수 없는거면 어쩔수 없는데
애초에 뱀파이어 서바이벌이나 탕탕특공대가 요놈처럼 렉많이 먹지는 않자나용 ㅠㅠ
↑↑↑↑ 문제의 모든 적에게 적용되는 공격 프레임드랍 ↑↑↑↑
이곳 프로파일러 캡처본입니다. 제가 잘몰라서 죄송합니다 ㅠ
참고로 저 번개 일부러 겜시작하고 전부 풀링을 통해 미리 생성해 놓은 것들입니다.. ㅠ
↑↑↑↑↑ 자석 사용 후 경험치 구슬 빨려들어갈때 너무 많아서 걍 겜이 안돌아감 ㅋㅋㅋ ↑↑↑↑↑
↑↑↑↑↑ 정상플레이 ↑↑↑↑↑
혹시 해당 분야에 대해 잘아시는 분 조언한말씀 부탁좀드리겠습니다용...
해당 댓글은 삭제되었습니다.
프로파일러 캡처본 올렸스빈다..
답변너무 감사드리구 제 모든 스크립트 자체가 코루틴 위주로 돌아가고 있습니당 ㅠㅠ 프로파일러 사용법 더 익히고 재질문하겠습니다 감사합니다.
프로파일러 가져오세요.. 진단은 그걸로 하는데...
일단 저부분 캡처본 올렸습니다.
생각 가능한 경우의 수가 많은데
일단 프로젝트세팅에서 물리부분에서 Layer Collision Matrix 최적화 되어있는지부터 확인하셈
필요한경우 아니면 rigidbody 쓰지마셈. 굉장히 무거움. 간단하게 떨어지거나 하는거면 직접 구현하는편이 좋음
오브젝트 폴링은 당연히 하고 있겠고
답변감사합니다. 몬스터 겹치는 문제로 인해 콜라이더 사용하고 리지드바디 사용하기때문에 어쩔수 없이 썼는데 다른 방법으로 몬스터 겹치는 거 방지할 수 있을까요?
탕탕이도 몬스터 많아지면 렉걸림.
근데 저정도로 걸리면 안될것 같아서 올렸어요 탕탕에서 아무리 자석으로 경험치 많이먹어도 자석으로 인한 렉은 저도 본적없어가지고..
에디터에서 저정도 렉이면 모바일은 터질듯.. 텍스쳐 크기부터 시작해서 최대한의 최적화를 해야할텐데 // 유니티 그래픽스 최적화 스타트업 << 일단 여기에 나오는거 전부 처리해보셈.
그리고 리지드바디 사용중이라면 transform.position 으로 이동하는거보다 rigidbody를 이용해서 움직이는게 훨씬 몇백배 최적화됨.
답변 정말 감사합니다. 일단 몬스터, 캐릭터 둘다 리지드바디 이동하고 있습니다. 텍스처 크기 말씀하셔서 그런데 제가 최근에 아틀라스 크기를 최대로 키워놨거든요 8096*8096으로 왜냐면 아틀라스 크기가 작아서 멀티페이지로 넘어가는순간 배치수가 기하급수적으로 늘어버리더라구요. 혹시 이게 원인이 아닐까 싶은데 확인해보겠습니다.
탕탕이 애니없던거같던데 몬스터는 좌우 로테이션 돌리고 그러던데
탕탕이도 동전이 화면에서 너무 멀리 떨어지면 지워지는거 같은데
저도 애니는 walk모션 die 모션 밖에없긴한데 ㅠㅠ 그리고 die모션은 전 몬스터 통일로 두었거든요 ㅠ 그리고 확실히 화면안에 구슬이 많지만 않으면 그니까 계속 벗어나면 렉은 전혀없긴합니다 ㅠ 참고하겠습니다.
자석 먹는 스크립트랑 몬스터 때리는 스크립트 봐야 알듯
자석 - 경험치마다 가지고 있는 컴포넌트고 플레이어가 자석을 먹으면 update에서 자석을 먹었다고 판단하고 플레이어에게 빠르게 이동. 이때 이동방식은 soulTransform.position += (Vector3)direction * magnetStrength * Time.deltaTime; 이렇게 움직입니다. 그리고 콜라이더를 통해 경험치를 흡수했는지 판단합니다. 몬스터 - 이것도 콜라이더 사용해서 데미지 계산합니다.
1. 광역스킬은 하나씩 꺼보면서 테스트 하면서 원인 찾으면 좋을듯 a. 데미지 폰트 Off 하고 렉 테스트 b. 몬스터 죽는 연출(이펙트) 없이 렉 테스트 2. 플레이어가 자석을 먹으면 먹었다고 콜라이더는 Off 한다음에 Dotween 사용해서 DoMove(Player Position) 해보면 어떨까 싶음 3. 논외로, 콜라이더 많이 쓰는경우면 Project Settings - Phyiscs 2D - Job Options - Use Multithreading 이것도 켜보셈
네 하나하나 테스트 해보겠습니다. 2번방법 너무 좋아보이네요 감사합니다!
보석이동을 코루틴으로 바꿔보셈
public IEnumerator MoveTowardsPlayer(Transform soulTransform) { while (soulTransform != null) { Vector2 direction = (ps.transform.position - soulTransform.position).normalized; soulTransform.position += (Vector3)direction * magnetStrength * Time.deltaTime; yield return null; } }ㅠㅠ이미 코루틴입니당
먹는 코드도 봐야할듯 근데 뱀서류는 기획으로 최적화 하는 경우도 많아서 몬스터 최대 100마리 보석 최대 300개 이런식으로
private void OnTriggerEnter2D(Collider2D collision) { if (collision.CompareTag("Player")) { PlayerStatus playerStatus = collision.gameObject.GetComponent(); playerStatus.CurrentExp += exp*(1+playerStatus.additionalExp);
if (magnetCoroutine != null) { StopCoroutine(magnetCoroutine); } if (magnetCoroutine_2 != null) { StopCoroutine(magnetCoroutine_2); } gameObject.SetActive(false); } }
먹는코드 입니다. 이이상 쌓이면 생성안되게 하는것도 좋은것 같네요 감사합니다.!
근데 화면 밖 애들까지 연산하니깐 좀 부화가 심할듯 화면밖에애들은 걍 즉사처리하고 보석도 눈속임으로 옮겨
풀링으로 일정영역 벗어나면 setactive(false)하고 있긴합니다.. ㅠ 보석을 눈속임으로가 어떤말씀이신지 여쭤봐도될까요?
DOTS로 개발하면 됨..
재밌어보인다 빌드하면 프레임 얼마나 나옴? 테스트 기종이랑
테스트기종은 보통 s10 5g 쓰고있구요. 빌드하면 저 윗상황만아니면 올타임 60프레임 나오고있습니다!
나도 할 수 있겠다 근데 잘 보니까 맵에도 무슨 회색 선이 나타났다 사라졌다 그러네
아저건 제가 타일맵 크기설정을 잘못해서 생기는 현상입니다. ㅠ 타일이 그냥 더미라서요 ㅠㅠ