유니티 2D 기본(Platformer Game) 썸네일형 리스트형 더블점프 구현 점프에 사용되는 스프라이트 이미지가 따로 나뉘어있어, 애니메이터를 생성할 수 없었다. 코드를 통해 스프라이트 이미지를 바꿔도 애니메이션 재생으로 스프라이트 이미지가 바뀌지 않는 것처럼 보이는 현상이 발생했다. 그래서 점프와 낙하중에는 애니메이터를 꺼버리고, 스프라이트 이미지를 교체하는 식으로 애니메이션을 만들었다. 스크립트 Rigidbody2D rigid; Animator animator; SpriteRenderer spriteRenderer; bool isJumping; bool isDoubleJumping; void jump() { if (Input.GetButtonDown("Jump") && !isDoubleJumping) { if (isJumping) //더블점프 { isDoubleJumping .. 더보기 10. 사운드 출력 게임에 사용할 오디오 클립들을 미리 선언한 후, audio 컴포넌트에서 조건에 따라 클립을 바꿔 사용합니다. 오디오 소스는 에셋스토어에서 무료로 가져올 수 있습니다. //Components AudioSource audioSource; //Audio Clips public AudioClip audioJump; public AudioClip audioAttack; public AudioClip audioDamaged; public AudioClip audioItem; public AudioClip audioDie; public AudioClip audioFinish; void Awake(){ audioSource = GetComponent(); } public void playSound(string acti.. 더보기 9. 스테이지 추가 & UI Create Empty로 빈 오브젝트를 만들고 다른 오브젝트들을 안에 넣어줍니다. 타일맵 & 팔레트로 스테이지를 그려줍니다. 깃발에 닿으면 현재 스테이지는 비활성화 되고, 다음 스테이지는 활성화 되는 방식입니다. 게임매니저에서 배열과 인덱스 번호를 사용해 컨트롤합니다. public int stageIndex; stages 배열 인덱스로 사용 public GameObject[] stages; //스테이지 맵핑 public void nextStage() { if (stageIndex < 2) //스테이지가 1, 2일때 현재 스테이지 비활성화, 다음 스테이지 활성화 { //Next Stage stages[stageIndex].SetActive(false); stageIndex++; stages[stageInd.. 더보기 8. 아이템 먹기 동전 먹기 오브젝트 생성 후 각각의 Item에 이름을 붙여준다. collider에서 isTrigger 체크하기 player 스크립트 public GameManager gm; //GameManager 오브젝트 맵핑하기 void OnTriggerEnter2D(Collider2D collision) { if (collision.gameObject.tag == "Item") { //Point bool isBronze = collision.gameObject.name.Contains("Bronze");//브론즈 코인 bool isSilver = collision.gameObject.name.Contains("Silver"); //실버 코인 bool isGold = collision.gameObject.name.C.. 더보기 7. 몬스터 밟아서 잡기 마리오처럼 몬스터 밟아서 처치하기 Player 스크립트 void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.tag == "Enemy") { //Attack if (rigid.velocity.y collision.transform.position.y) { onAttack(collision.transform); //충돌 정보 매개변수로 전달 } else { onDamaged(collision.transform.position); } } } void onAttack(Transform enemy) { //Reaction Force rigid.AddForce(Vector2.up *.. 더보기 6. 플레이어 피격 이벤트 구현 Layer 활용을 위해 새로운 타일맵 생성 - 타일맵은 각각 한개의 Layer만 적용가능하기때문 Platform 타일맵 Spikes 타일맵 Spikes 타일맵에 팔레트를 이용해 함정(가시) 배치 몬스터도 Enemy로 적용 게임에서 Enemy끼리는 보통 물리 충돌하지 않기때문에, 서로 물리 영향을 안받도록 설정합니다. Edit -> Project Settings -> Physics2D 하단 역피라미드 모형에서 조건에 맞춰 체크해제 이제 Enemy Layer끼리는 물리 충돌이 일어나지 않습니다. 다음으로 플레이어 피격 이벤트를 구현합니다. 보통 플레이어 피격 시 일정시간 무적이기 때문에 Layer를 "Player"과 "PlayerDamaged" 두개로 만듭니다. 또한 무적시간 동안 Enemy와 물리충돌이 일.. 더보기 5. 몬스터 AI 구현하기 결과 스크립트 생성 및 몬스터에게 주기 스크립트(EnemyMove) using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyMove : MonoBehaviour { Rigidbody2D rigid; Animator anim; SpriteRenderer sprite; public int nextMove; //몬스터의 다음 이동 방향 결정 변수 void Awake() { rigid = GetComponent(); anim = GetComponent(); sprite = GetComponent(); Invoke("think", 3); //3초 뒤 think 함수 호출 예약 } void Fixe.. 더보기 4. TileMap으로 플랫폼 만들기 앞에서는 Floor 오브젝트를 하나하나 x축 옮겨가며 이어붙였지만, TileMap을 사용하면 그러지 않아도 됩니다. 앞에서 사용하던 Floor오브젝트는 다 지우고 Finish, Coin, Enemy 오브젝트는 disable상태로 두겠습니다. Tilemap 오브젝트 생성 2D Object -> Tilemap -> Rectangular Tilemap Palette 열기 상단 메뉴 Window -> 2D -> Sprite Editor 스프라이트 이미지를 Palette에 드래그 앤 드랍 저장 경로를 정하고 저장하면 팔레트에 뒤죽박죽으로 생성됩니다. 이를 정리합니다. Edit를 눌러 수정모드 S : 선택 M : 이동 Edit를 눌러 그리기 모드 B : Scene에 그리기 Scene에 그려줍니다. 타일맵에 콜라이더.. 더보기 이전 1 2 다음