캐릭터와 몬스터가 만나면 전투가 시작되어야 한다. 이를 위해 충돌과 물리처리를 해줄 것이다.
이번 주차때 배운 전체 내용은 아래 포스트에서 확인할 수 있다.
2025.04.25 - [Study] - [ SJCE 스터디 / 3주차 ] Unity 씬 전환, DontDestroy, 싱글톤
[ SJCE 스터디 / 3주차 ] Unity 씬 전환, DontDestroy, 싱글톤
2024.09.21(토): 원래 3주차는 14일로 예정되어 있었으나, 학교 정전의 이슈로 일주일 미뤄서 진행됐다. 또한, 서버 파트 선배님께서도 일정이 있으셔서 참석하지 못하셔서 유니티 수업으로만 진행
record-coding53.tistory.com
몬스터는 화면 밖에 위치시켰다가 등장시킬 것이다.
Step 1. Monster 스크립트 생성
- 배경사진은 여러 장이라 localPosition을 설정했지만, 몬스터는 혼자니까 본인만 움직이면 된다.
- Monster.cs 스크립트에 public float speed를 선언한다
- Start 함수에서 speed = 0.5f로 설정한다
- Update 함수에서 this.transform.Translate(new Vector3(-1*Time.deltaTime*speed,0)); 구문을 작성한다
- transform은 변경시킨다는 의미이고 translate는 매개변수 값만큼 변경한다는 의미이다.
public class Monster : MonoBehaviour
{
public float speed;
void Start()
{
speed = 0.5f;
}
void Update()
{
// 왼쪽으로 이동
transform.Translate(new Vector3(-1 * Time.deltaTime * speed, 0, 0));
}
}
Step 2. Monster 스크립트 연결
- monster 오브젝트에 monster 스크립트를 달아준다
Step 3. 물리엔진 적용
💡 RigidBody : 중력, 충돌, 힘(Force), 속도(Velocity) 등의 물리적인 성질을 부여하는 컴포넌트
- character과 monster 오브젝트에 Add Component로 RigidBody를 추가
- Use Gravity는 중력의 영향을 받는 옵션으로 우리 게임에서는 꺼주도록 한다
그러나 RigidBody 적용 만으로는 충돌을 체크할 수 없고, 몬스터와 캐릭터가 통과해 지나가게 된다.
따라서 충돌을 체크하기 위해 Box Collider 컴포넌트를 추가해 준다.
💡 Box Collider는 오브젝트 주위에 보이지 않는 "박스형 충돌 영역"을 만들어주는 컴포넌트이다.
이 박스를 통해 Unity의 물리 엔진이 “부딪혔다”, “겹쳤다”, “접촉했다” 를 판단한다.
- 캐릭터와 몬스터 오브젝트에 Box Collider 컴포넌트를 추가한다.
- 그러면 각 오브젝트에 초록색 상자가 생기고, Box Collider에서 Size를 적당하게 조절한다.
- Is Trigger는 조건 체크를 위한 옵션으로 체크하도록 한다
Step 4. Character 스크립트 생성
- public Animator anim 변수 선언
- void OnTriggerEnter(Collider other) 함수 작성
- 함수 내부에 몬스터를 만났을 때의 구문 작성
using UnityEngine;
public class character : MonoBehaviour
{
public Animator anim;
void OnTriggerEnter(Collider other)
{
if (other.transform.tag == "enemy")
{
Debug.Log("crashed");
anim.Play("character_attack");
}
}
}
Step 5. 오브젝트에 Tag 추가
- Monster 오브젝트의 Inspector 상단의 Tag 항목에서 Tag를 추가(Add Tag)하여 enemy로 명명한다
- 캐릭터 오브젝트에도 player라는 Tag를 추가한다.
Step 6. 캐릭터 오브젝트에 Character 스크립트 달아주기
- 캐릭터 스크립트 컴포넌트의 Anim 요소에 Character 오브젝트를 달아준다.
- 플레이시 충돌 확인이 가능하다
- 단, 캐릭터와 몬스터 오브젝트의 Z축 값이 동일해야 하므로 0으로 맞춰준다.
- monster 스크립트의 OnTrigger 함수에 tag는 player, 조건문 내부에 speed = 0f; 작성하면 몬스터 충돌 시 정지도 확인 가능하다.
'FE > Unity' 카테고리의 다른 글
[ Unity2D ] 싱글톤 패턴을 이용한 GameManager 설정 (0) | 2025.04.25 |
---|---|
[ Unity2D ] 방치형 게임 - 캐릭터 애니메이션 (0) | 2025.04.25 |
[ Unity2D ] 방치형 게임 - DontDestroy (0) | 2025.04.25 |
[ Unity2D ] 방치형 게임 - 씬(Scene) 전환 구현 (0) | 2025.04.25 |
[ Unity2D ] 방치형 게임 - Background 설정 (0) | 2025.04.24 |