#1_ 플레이어 이동
오른쪽과 왼쪽키를 동시에 누르면 문워크하는 현상이 발생하는데
이는 GetButtonDown을 사용할경우 키 입력이 겹치는 구간에서 문제가 발생한다.
이 부분을
GetButton으로 바꾸어준다.
#2_몬스터 잡기
몬스터보다 위에 있음 + 아래로 낙하 중 = 밟음. --> 몬스터 die의 로직을 짜볼 것이다.
우선 player 클래스는
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "Enemy")
{
// 공격 --> 낙하 중이면서 플레이어의 위치가 enemy의 위치보다 높을 때
if (rigid.velocity.y < 0 && transform.position.y > collision.transform.position.y)
{
OnAttack(collision.transform);
}
else //데미지입음
{
OnDamaged(collision.transform.position);//충돌했을때 x축,y축 넘김
}
}
}
void OnAttack(Transform enemy)
{
//reaction force
rigid.AddForce(Vector2.up * 5, ForceMode2D.Impulse);
// enemy die
EnemyMove enemyMove = enemy.GetComponent<EnemyMove>();
enemyMove.OnDamaged(); //enemy입장에서 데미지 입은거
}
|
cs |
enemy 클래스는
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public void OnDamaged()
{
// 투명하게 변함
spriteRenderer.color = new Color(1, 1, 1, 0.4f);
//방향 바꿔주기
spriteRenderer.flipY = true;
//콜라이더 비활성화
capsuleCollider.enabled = false;
//die effect jump
rigid.AddForce(Vector2.up * 5, ForceMode2D.Impulse);
//5초 뒤에 사라짐
Invoke("DeActive", 5);
}
void DeActive()
{
gameObject.SetActive(false);
}
|
cs |
여기서 capsuleCollider는 위에서 capsuleCollider2D를 GetComponent 한것이다.
몬스터가 투명해지면서 떨어지게 된다.
#3_아이템
동전 아이템을 먹었을 때 투명해지면서 사라지는 효과를 줘볼 것이다.
아이템들의 tag를 다 Item으로 설정한다.
동전 아이템들이 반짝반짝 돌아가는 효과는 애니메이션으로 주면된다.
콜라이더+스프라이트+애니메이션 작업으로 구현하면되는데
isTrigger 꼭 켜줘야한다. 안그러면 플레이어가 아이템을 먹는 효과가 나지 않는다.
(OnTriggerEnter2D 메서드로 동전과 플레이어가 충돌할 때 동전이 사라질 것이기 때문에..!)
1
2
3
4
5
6
7
8
9
10
11
12
|
//동전
void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.tag == "Item")
{
//point
//사라짐
collision.gameObject.SetActive(false);
}
}
|
cs |
플레이어 클래스에 위 코드를 넣어준다.
#4_결승선
결승선과 플레이어가 충돌하면 다음단계로 넘어가는 로직을 작성해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.tag == "Item")
{
//point
//사라짐
collision.gameObject.SetActive(false);
}
else if (collision.gameObject.tag == "Finish")
{
//next stage
}
}
|
cs |
#5_ 게임 매니저
매니저는 점수와 스테이지를 관리한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class GameManager : MonoBehaviour
{
public int totalPoint;
public int stagePoint;
public int stageIndex;
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
|
cs |
위 코드 처럼 GameManager 스크립트를 만들어야한다.
플레이어 클래스에서 매니저 변수를 만들어 게임 매니저의 점수 변수에 접근하게 한다.
하이어라키 창의 GameManager를 Player의 GameManager 변수에 집어 넣는다
이렇게 되면 Player클래스에서도 게임 매니저에 점수 변수에 접근할 수 있게 됐다.
맨 위에 GameManager 객체 가져오고,
이렇게 동전과 충돌했을 때 100점을 먹는다.
근데 동전마다 차등으로 점수를 더해주고 싶으면 어떻게 할까?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.tag == "Item")
{
//point
bool isBronze = collision.gameObject.name.Contains("CoinB");
bool isSilver = collision.gameObject.name.Contains("CoinS");
bool isGold = collision.gameObject.name.Contains("CoinG");
if (isBronze)
{
gameManager.stagePoint += 50;
}else if (isSilver)
{
gameManager.stagePoint += 100;
}
else if (isGold)
{
gameManager.stagePoint += 300;
}
|
cs |
Contains(비교문)
: 대상 문자열에 비교문이 있으면 true
동전을 먹었을 때 게임 매니저의 stage point가 늘어남을 확인할 수 있다.
게임 매니저에서 NextStage()라는 메서드를 만들고
플레이어 클래스에서
NextStage 로 이동할 수 있게끔한다.
'Unity > 2D' 카테고리의 다른 글
[Unity] 2D게임 만들기 #7_플레이어 피격이벤트 구현 (0) | 2021.09.26 |
---|---|
[Unity]2D게임만들기 #6_몬스터 AI구현 (0) | 2021.09.26 |
[Unity]2D게임 만들기 #5_타일맵으로 플랫폼 만들기 (1) | 2021.09.26 |
[Unity]2D게임만들기 #4_ 플레이어 점프 구현 (2) | 2021.09.26 |
[Unity] 2D게임 만들기 #3-2_ 플레이어 이동과 애니메이션 순환/ 애니메이터 이용해서 플레이어 멈추고 걷기 구현 (2) | 2021.09.06 |
댓글