일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Vampire Survivors
- 1인 개발
- 필기
- Unity
- 3회차
- FPS
- 정처기
- Unity2D
- 자바스크립트 게임
- 유니티 3D
- unity3d
- 1인 게임 개발
- Pong
- 토이 프로젝트
- Unity #Unity2D #Portal
- 유니티3d
- portal
- 게임 제작
- 퐁
- 1인 게임
- 게임 개발
- 정보처리기사
- 유니티
- 정처기 필기
- 자바스크립트
- 게임제작
- 합격
- 게임
- 1인 게임 제작
- 프로그래머스 #최소힙 #우선순위 큐
- Today
- Total
Coding Feature.
[Unity 2D] Portal 같은 게임 만들기 #8 캐릭터 애니메이션 / 효과음 본문
[Unity 2D] Portal 같은 게임 만들기 #8 캐릭터 애니메이션 / 효과음
codingfeature 2024. 1. 9. 15:01캐릭터가 움직일 때 애니메이션을 추가해보겠습니다!
플레이어 게임 오브젝트에
"Player_Idle"
"Player_Run"
"Player_Jump"
애니메이션을 추가해줬습니다.
그리고 달릴 때와 점프할 때의 스프라이트들을 각각 추가해줬습니다.
그 뒤, Animator의 parameter에 Float형의 "Speed"와 boolean 형의 "IsGrounded"를 추가해줬습니다.
그 다음, Animator 내 transition을 다음과 같이 설정했습니다.
Idle에서 Run : Speed > 0.1
Run에서 Idle : Speed < 0.1
Any State에서 Jump : IsGrounded == false
Jump에서 Idle : IsGrounded == true
조건으로 설정해줬습니다.
그리고 Player 오브젝트에 있는 스크립트에 다음 코드를 추가로 작성했습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
Rigidbody2D m_rb;
..
public Animator animator;
bool m_isFacingRight;
..
// Update is called once per frame
void Update()
{
animator.SetFloat("Speed", Mathf.Abs(m_rb.velocity.x));
animator.SetBool("IsGrounded", m_isGrounded);
if (m_rb.velocity.x < 0 && m_isFacingRight)
{
gameObject.GetComponent<SpriteRenderer>().flipX = true;
m_isFacingRight = false;
}
if (m_rb.velocity.x > 0 && !m_isFacingRight)
{
gameObject.GetComponent<SpriteRenderer>().flipX = false;
m_isFacingRight = true;
}
..
Speed 파라미터에는 속도 x좌표값의 절댓값을 주고, IsGrounded는 m_isGrounded를 그대로 제공했습니다.
그리고 m_isFacingRight 불리언 형 변수를 추가해서 캐릭터가 어느 방향으로 보고 있는지를 확인하고 그에 맞게 Sprite Renderer의 x좌표를 flip하도록 했습니다.
아래 영상을 참고했습니다!
https://youtu.be/hkaysu1Z-N8?si=W06rNV6a1x9Jq6Sl
그 다음에는 캐릭터가 달리는 효과음을 추가해보겠습니다!
인터넷에서 Running 효과음을 찾고 캐릭터 오브젝트에 추가했습니다.
그리고 PlayerMovement.cs에 다음 코드를 추가했습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
Rigidbody2D m_rb;
AudioSource m_audioSource;
..
// Start is called before the first frame update
void Start()
{
..
m_audioSource = GetComponent<AudioSource>();
..
}
// Update is called once per frame
void Update()
{
..
if (m_rb.velocity.x != 0 && m_isGrounded)
{
if (!m_audioSource.isPlaying)
m_audioSource.Play();
}
else
{
m_audioSource.Stop();
}
}
..
}
캐릭터의 x좌표 속도가 0이 아니고, 땅에 닿아있는 상태일 경우, m_audioSource.Play() 함수를 통해 오디오를 플레이합니다. 이때 isPlaying를 통해 이미 달리기 효과음이 재생되고 있는 경우 재생을 무시하도록 합니다.
위와 같은 방법으로 포탈을 통과하는 소리, 전원 버튼을 누르는 소리를 따로 추가해줬습니다.
사실을 위처럼 게임 오브젝트에서 효과음을 따로 추가한 뒤에 각 스크립트에서 관리하게 하는 것은 좋은 방법은 아닙니다.
차라리 Audio Controller 같은 스크립트를 따로 만들어서 배경음악과 한꺼번에 관리하도록 하는 것이 큰 프로젝트에 도움이 될 것입니다.
현재는 효과음이 얼마 없기 때문에 이렇게 처리했지만 추후에 코드 리팩토링을 하는 과정에서 Audio Manager를 구현해볼 생각입니다!
다음에는 게임 시작 화면 및 옵션 화면을 구현해보도록 하겠습니다!
'Toy Project > mini-portal [Unity2D]' 카테고리의 다른 글
[Unity 2D] Portal 같은 게임 만들기 #10 레벨 디자인에 대한 깨달음. (0) | 2024.01.12 |
---|---|
[Unity 2D] Portal 같은 게임 만들기 #9 메인 메뉴, Sprite 변경, Post Processing, 프레임 제한 (0) | 2024.01.11 |
[Unity 2D] Portal 같은 게임 만들기 #7 레벨 1 디자인, Scene Controller (0) | 2024.01.09 |
[Unity 2D] Portal 같은 게임 만들기 #6 포탈, 포탈건, 캐릭터의 버그 해결 (0) | 2024.01.08 |
[Unity 2D] Portal 같은 게임 만들기 #5 포탈건 매커니즘 구현하기 2 (포탈 생성하기) (0) | 2024.01.07 |