일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 천체사진
- 킥스타터
- centos
- 라즈베리파이
- 이브온라인
- 게임제작
- 이브
- 포크스푼
- 미니적도의
- C언어
- 미타니
- 스카이트래커
- 데포르메
- 점상
- 온라인
- DX라이브러리
- 유루캠
- UI
- inputsystem
- 유니티
- 드론
- This is EVE
- 이브뉴스24
- 자율비행
- 언성스토리
- 오브젝트이동
- coroutine
- 리눅스
- 번역
- 오픈스택
- Today
- Total
게임개발 예제모음
오브젝트간 상호작용을 통한 애니메이션 클립 재생 본문
○ 구현목표
- 플레이어가 이동하며 필드에 떨어진 아이템에 접촉하면 아이템을 획득 - 획득과 동시에 애니메이션 클립/효과 재생 - 아이템 오브젝트와 애니메이션 클립은 이벤트 발생 이후 제거 - 플레이어 오브젝트는 이동에 관련된 기능은 설정 완료된것으로 가정한다. |
※ 오브젝트 이동 참고자료
2025.06.03 - [유니티 메모장] - InputSystem (RigidBody) 이동 예제
InputSystem (RigidBody) 이동 예제
2025.06.03 - [유니티 메모장] - 인풋시스템을 통한 오브젝트 이동 (ActionMap) 인풋시스템을 통한 오브젝트 이동 (ActionMap)○ 오브젝트에 Player Input 컴포넌트 추가○ Action에서 액션맵편집 (확인) 필요○
capsuleer.tistory.com
○ 논리 흐름
○ 플레이어 오브젝트 각종 설정
※ Tag는 Player로 설정
※ Player Input, Rigidbody 2D의 경우 이동관련 설정중에 추가된다.
※ 상호작용 체크를 위해 콜라이더를 추가한다. 상황에 따라 다른 모양의 콜라이더를 사용해도 무방하다.
○ 아이템 오브젝트 설정
① 스크립트 작성 - 신규 스크립트(item.cs)를 생성하여 아이템 오브젝트에 어태치 및 Circle Collider 2d 추가
※ 콜라이더의 [Is Trigger] 체크
② 스크립트 작성
using Unity.Mathematics;
using UnityEngine;
public class Item : MonoBehaviour
{
[SerializeField] GameObject pickUpClip; //애니메이션 클립 변수
Transform myTransform; //아이템의 위치 확인을 위한 Transform컴포넌트 캐싱 변수
Vector3 itemPosition; //위치 확인 후 기억을 위한 Vector3 변수
void Start()
{
myTransform = GetComponent<Transform>(); //Transform 캐싱
}
void OnTriggerEnter2D(Collider2D other) //콜라이더 내부로 진입을 체크
{
itemPosition = myTransform.position; //현재 아이템의 위치 확인
if (other.tag == "Player")
{
Instantiate(pickUpClip, itemPosition, quaternion.identity);
//애니메이션 클립 호출
//Quaternion.identity : 별도의 회전값을 주지 않겠다
Destroy(gameObject); //아이템 오브젝트 제거
}
}
}
Instantiate 기본형
------------
Instantiate(오브젝트, new Vector3(x, y, z) , 오브젝트 배치 각도);
//오브젝트의 각도 관련 Quaternion내용은 유니티 매뉴얼 참고
https://docs.unity3d.com/kr/2021.3/Manual/class-Quaternion.html
중요 클래스 - Quaternion - Unity 매뉴얼
Unity는 Quaternion 클래스를 사용하여 게임 오브젝트의 3차원 방향을 저장하고, 이를 통해 한 방향에서 다른 방향으로의 상대 회전을 설명합니다.
docs.unity3d.com
○ 애니메이션 클립 작성
① Hierarchy에 애니메이션 클립을 위한 빈 오브젝트를 작성
② 애니메이션 클립 작성을 위해 Sprite를 자식 오브젝트로 추가
※ 애니메이션 작성 시 오브젝트의 Position을 리셋하여 (0,0,0)으로 맞춰준다.
③ 애니메이션 작성
※ 프레임을 활용 하거나 애니메이션 녹화를 사용하여 애니메이션 작성
○ 애니메이션 클립 제어용 스크립트 작성
① 스크립트 생성 및 어태치
② 스크립트 작성
using UnityEngine;
public class AnimationClip : MonoBehaviour
{
[SerializeField] GameObject parentsObject; //애니메이션 클립 자기자신을 가리키는 변수
Animator myAnimator; // Animator 캐싱용
void Start()
{
myAnimator = GetComponent<Animator>(); //Animator 캐싱
}
void Update()
{
if (!AnimatorIsPlaying()) //애니메이션 클립 재생이 완료되면
{
Destroy(parentsObject); // 클립 오브젝트를 파괴한다
}
}
bool AnimatorIsPlaying() //클립의 재생 여부 확인용 함수
{
return myAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1f;
}
}
③ 작성한 오브젝트를 프리펩으로 만든 후 하이라키의 오브젝트는 삭제한다.
○ 스크립트에 선언한 변수에 각각의 오브젝트 어태치
① 아이템 오브젝트
② 애니메이션 클립 오브젝트 : 애니메이션 클립의 부모 오브젝트를 어태치
○ 실행 테스트
'유니티 메모장' 카테고리의 다른 글
함수에서 특정 자료 반환하기 (0) | 2025.06.10 |
---|---|
스크롤뷰 방향키로 조작하기 (0) | 2025.06.09 |
CSV파일을 로드하여 TEXT 출력 (0) | 2025.06.06 |
현재 선택중인 버튼 확인 (0) | 2025.06.05 |
UI만들기 : 하위 메뉴버튼 이동 및 복귀 (0) | 2025.06.04 |