본문 바로가기

전체 글

UnityEditor.Graphs.Edge.WakeUp() null 에러 UnityEditor.Graphs.Edge.WakeUp() NullReferenceException: Object reference not set to an instance of an object 애니메이터를 사용하다 보면 가끔 뜨는 에러 유니티를 껏다 켜면 해결된다. 더보기
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에 그려줍니다. 타일맵에 콜라이더.. 더보기
4. 플레이어 점프 구현 & Raycast public float jumpPower; void Update() { //Jump if (Input.GetButtonDown("Jump")){ rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse); } } 공기저항 때문에 낙하 속도가 조금 느립니다. 이를 빠르게 낙하하도록 조정해보겠습니다. 점프 낙하 속도 빠르게 조절 1. Project Setting -> Gravity y Default 값은 -9.81로 값이 커질 수록 중력이 세집니다. 2. Gravity Scale 중력을 몇배로 받을 것인지 값으로 정합니다. 점프 애니메이션 1. 애니메이션 Transition 연결 2. 애니메이션 변경 조건이 될 변수 생성(bool 타입) 3. Conditons.. 더보기
3. 2D에서 플레이어 이동 구현 2D는 Vector2, 2D컴포넌트를 사용. (3D는 Vector3 등) Rigidbody2D, Collider2D Physics2D 스크립트 상에서 2D 예 RigidBody2D rigid = GetComponent(); Vector2 vec = new Vector2(x, y); 플레이어 기본 이동 & 최고 속도 제한 로직 why? : Addforce를 계속 사용하면 플레이어의 이동 속도가 점점 빨라지므로 public float maxSpeed; void FixedUpdate() { //Move speed float h = Input.GetAxisRaw("Horizontal"); rigid.AddForce(Vector3.right * h, ForceMode2D.Impulse); //Max speed i.. 더보기
2. 아틀라스와 애니메이션 스프라이트 이미지 Inpector에서 Sprite Mode -> Multiple로 바꿔 스프라이트 이미지를 쪼개줍니다. Single과 Multiple과의 차이 Inspector에서 Sprite Editor를 클릭해 에디터(아틀라스라고 합니다)로 넘어옵니다. 아틀라스에서 스프라이트 이미지를 자를 수 있습니다. 왼쪽 부터 차례로 Automatic : 자동 Grid By Cell Size : 입력한 셀 사이즈 기준으로 자름 (이미지가 16x16이므로 셀 사이즈도 16x16으로 적어줍니다.) Grid By Cell Count : 입력한 셀 개수 기준으로 자름 우측 상단 TV이모티콘 버튼으로 색 반전이 가능합니다. 이제 이 분할한 스프라이트를 가지고 애니메이션을 넣어보겠습니다. 애니메이션은 이 이미지들의 연속된 .. 더보기
Scene에서 카메라 아이콘 크기 줄이는 법 Gizmos -> 3D Icons 스크롤바로 조정 더보기