https://www.youtube.com/watch?v=0aUCu1BcZxs&list=PLO-mt5Iu5TeZF8xMHqtT_DhAPKmjF6i3x&index=7
1. 오브젝트 만들기
몬스터 오브젝트의 Run0을 하이어라이키에 드래그 드랍, Shadow 적용
Animator 추가후 할당(Animation 폴더)
Rigidbody2D 컴포넌트 추가 및 중력(Gravity scale=0)과 회전 제거(Freeze Rotation z) //플레이어도
Capsule Collider 2D 추가 (0.7,0.9)
Sprite Renderer 설정 복사를 통해 Enemy1 도 생성
2. 플레이어 추적 로직
Enemy 스크립트 생성
public float speed;
public Rigidbody2D target;
bool isLive = true;
Rigidbody2D rigid;
SpriteRenderer spriter;
- 속도, 목표, 생존여부를 위한 변수 선언
- target : 쫒아갈 target 선언 (유니티 인스펙터에서 할당)
- Rigidbody2D와 SpriteRenderer(플립을 위해) 선언
Awake에서 초기화 진행
로직에 필요한 변수 선언
private void FixedUpdate()
{
Vector2 dirVec = target.position - rigid.position;
Vector2 nextVec = dirVec.normalized * speed * Time.fixedDeltaTime;
}
- 위치 차이 = 타겟 위치 - 나의 위치
- 방향 = 위치 차이의 정규화(Nomaliaed)
따라가는 로직
private void FixedUpdate()
{
rigid.MovePosition(rigid.position + nextVec);
rigid.velocity = Vector2.zero;
}
- 순간이동식 이동 방법
- 물리 속도가 이동에 영향을 주지 않도록 속도 제거
- velocity를 0으로 만들어 줘야 충돌시 영향을 주지 않는다.
몬스터 오브젝트들에게 작성한 Enemy 스크립트 추가하기
target에 Player 오브젝트 끌어넣기
Speed 변수 설정(2.5)
몬스터 스프라이터의 방향 바꾸기(filpX)
private void LateUpdate()
{
spriter.flipX = target.position.x < rigid.position.x;
}
isLive 변수를 통해 죽었으면 비활성화
private void FixedUpdate()
{
if (!isLive)
return;
...
}
private void LateUpdate()
{
if (!isLive)
return;
...
}
- 단, 테스트 상태이므로 선언시 true로 선언하고 할 것
3. 몬스터 재배치
플레이어 속도가 빠르기 때문에 일정한 방향으로 갈경우 무한히 만나지 못하는 문제가 발생
Reposition의 Enemy 부분을 작성
이때 Enemy가 죽었는지 살았는지 구분이 필요함
Collider2D 변수 생성 및 초기화
Collider2D coll;
private void Awake()
{
coll = GetComponent<Collider2D>();
}
- Collider2D는 기본 도형의 모든 콜라이더2D를 포함
콜라이더가 활성화 상태이면 이동시키는 로직
case "Enemy":
if (coll.enabled)
{
transform.Translate(playerDir * 20 +
new Vector3(Random.Range(-3f, -3f), Random.Range(-3f, -3f), 0f));
}
break;
- transform.Translate를 통해 위치를 "플레이어 보는 방향 * 20 + (-3~3,-3~3,0)" 으로 바꾼다.
새로운 Tag인 Enemy를 만들고 몬스터 오브젝트 Tag를 Enemy로 바꾼다.
깃허브 올리기
Commit : ver 1.5
Description : Unrimited map
https://github.com/mekain80/CloneCode_Undead_Survivor
'게임개발 > 언데드서바이벌_골드메탈_클론코딩' 카테고리의 다른 글
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 6+ (소환 레벨⏳적용하기) (0) | 2023.04.09 |
---|---|
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 6 (오브젝트 풀링🏊으로 소환하기) (0) | 2023.04.09 |
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 3 (2D 셀 애니메이션🏃제작하기) (0) | 2023.04.06 |
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 2+ (새로운 인풋시스템 적용하기, Input Manager ) (0) | 2023.04.06 |
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 2 (0) | 2023.04.05 |