Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

개발일기

유니티#21 와 맛있다 PlayerInput, Physics Material 2D, Effect 본문

Unity

유니티#21 와 맛있다 PlayerInput, Physics Material 2D, Effect

kimjw7815 2025. 5. 20. 19:14

얘기해볼 것이 많다

 

Window > Package Manager
컴포넌트로 넣었을 때의 모습

패키지 매니저에서 Input System 패키지를 확인할 수 있다

내가 보기엔 애초에 기본적으로 설치되어있던 것 같긴한데 어쨋든 확인해보면 좋을 테고

만약 이 패키지가 있다면 오브젝트에 Player Input 컴포넌트를 추가해줄 수 있다

이 컴포넌트를 사용하는 것이 PlayerMovement.cs에서 직접 인풋을 받는 것 보다 나은 이유가 뭐냐면, PlayerMovement.cs에서 OnMove(InputValue value)나 OnJump() 등의 사기적인 함수들을 기본적으로 사용할 수 있기 때문이다

그 외에도 Behavior에 보이듯이, OnAttack이나 OnInteract 등의 함수들도 쓸 수 있다

본인이 Player 오브젝트를 좀 친다 그러면 이 패키지를 꼭 써보자

using UnityEngine;
using UnityEngine.InputSystem;

public class CatMovement : MonoBehaviour
{
    [SerializeField] float moveSpeed;
    [SerializeField] float jumpForce;
    Vector2 moveInput;
    Rigidbody2D catRigidBody;
    Collider2D catCollider;
    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {
        Application.targetFrameRate = 60;
        catRigidBody = GetComponent<Rigidbody2D>();
        catCollider = GetComponent<Collider2D>();
    }

    // Update is called once per frame
    void Update()
    {
        Run();
    }

    void OnMove(InputValue value)
    {
        moveInput = value.Get<Vector2>();
    }

    void OnJump()
    {
        if (!IsTouchingGround()) return;
        catRigidBody.linearVelocityY = jumpForce;
    }

    void Run()
    {
        catRigidBody.linearVelocityX = moveInput.x * moveSpeed;
    }

    bool IsTouchingGround()
    {
        int groundLayer = LayerMask.GetMask("Ground");
        return catCollider.IsTouchingLayers(groundLayer);
    }
}

 

그 다음으로 알아볼 건 Physics Material 2D이다

사실 지금까지 만들어온 유니티 프로젝트들에는 큰 문제가 하나 있었다

Player고 금마리고 뭐고 전부 벽에 박으면 스파이더맨이 되어버린다는 것이다

바로 착 달라붙는 걸 보면 사실 이미 거미에게 물린지 좀 된 녀석들이다

이는 벽 오브젝트들과 플레이어 오브젝트가 부딪히면서 마찰력을 계산해서 그렇게 되는 것인데, 이를 해소해줄 방법이 바로 메테리얼Material을 사용하는 것이다

간단히 '재질'과 비슷한 용어라고 생각할 수 있다

우클릭 > Create > 2D > Physics Material 2D
객체 Inspector 창. Friction의 기본값은 0.4쯤 된다

이걸 활용하면 마찰력이나 탄성 계수 등을 직접 설정할 수 있어서 플레이어가 스파이더맨에 빙의하는 불의의 참사를 예방해줄 수 있다

찬양해 메테리얼!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

Hierarchy 우클릭 > Effects > Particle System

그 다음은 파티클이다

난 이게 Project에서 객체로 생성할 줄 알았는데 Hierarchy에서 만드는 거였더라

어쨋든 얘를 갖고 말 그대로 파티클 조절할 수 있다

이건 내가 까먹지 않는 용도로 써둔 거긴 하지만 유용할 수 있으니 관심 있으면 써보도록 하자