김산나
[멋쟁이사자처럼부트캠프 유니티 게임 개발 7기] 2026년 1월 30일 회고록 - Input System, Particle System 본문
[멋쟁이사자처럼부트캠프 유니티 게임 개발 7기] 2026년 1월 30일 회고록 - Input System, Particle System
김산나 2026. 1. 31. 00:342026_01_30 강의 요약본
1. Input System
오늘은 새로운 Input System에 대해 배웠다.

기존에는 그냥 쌩 코드로 플레이어를 움직였는데, 좀 모듈식?ㅠㅠ 으로 분리되었다.
그래서 쫌쫌따리 세팅을 해주어야 함.
(물론 프로젝트 새로 만들면 프리셋 하나 만들어줌)


열면 이런 창이 뜬다.
대충 원리를 보자면, 키를 지정하고 그에 맞는 로직을 연결해 주는구조.

솔직히 코딩이 더 쉬운 거 같다
이러면 코딩 안 해도 되는 거 아님? 100% 맞는 말은 아니기 때문...

아무튼 플레이어 오브젝트에 Player Input을 달아주자.

그리고 Defalt Map - Player / Behavior - Invoke Unity Events 선택.
오브젝트에 RigidBody를 붙인다.
<코드>
using UnityEngine;
using UnityEngine.InputSystem; <<-- 이거 있어야 작동
private Vector2 moveInput;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
// PlayerInput 호출
public void OnMove(InputAction.CallbackContext context)
{
moveInput = context.ReadValue<Vector2>();
}
// 물리 업데이트
void FixedUpdate() <<-- Rigid Body는 이걸 쓴다.
{
Vector3 move = new Vector3(moveInput.x, 0f, moveInput.y);
rb.MovePosition(rb.position + move * speed * Time.fixedDeltaTime);
// rb.linearVelocity에 넣는 방식도 됨
}
기본 이동 코드이다.
이 코드를 붙이고

플레이어 인풋을 세팅한다.

정상 작동한다.
+ 다른 방법

C#클래스 생성, Apply하면

이런 게 생성된다.
이걸 생성하면 이제 코드로 불러올 수 있다.
private PlayerInputActions inputActions;
private Vector2 moveInput;
private Rigidbody rb;
private void Awake()
{
inputActions = new PlayerInputActions();
}
private void OnEnable()
{
inputActions.Player.Enable();
}
void FixedUpdate()
{
moveInput = inputActions.Player.Move.ReadValue<Vector2>();
Vector3 move = new Vector3(moveInput.x, 0f, moveInput.y);
rb.MovePosition(rb.position + move * speed * Time.fixedDeltaTime);
}
위 코드를 이렇게 수정해도 사용할 수 있다.
public void Update()
{
moveInput = inputActions.Player.Move.ReadValue<Vector2>();
Vector3 move = new Vector3(moveInput.x, 0f, moveInput.y);
transform.Translate(move * speed * Time.deltaTime);
// 또는 transform.position += move * speed * Time.deltaTime;
}
이렇게도 OK
이동 코드를 지우고 이렇게 코드를 넣으면
float moveX = moveInput.x * rotateSpeed * Time.deltaTime;
transform.Rotate(0f, moveX, 0f);

회전한다.
float moveX;
public void Update()
{
if (moveInput.x != 0)
moveX += moveInput.x * rotateSpeed * Time.deltaTime;
transform.rotation = Quaternion.Euler(0f, moveX, 0f);
}
이전에 배운 Quaternion을 사용하여 돌릴 수도 있다.
+ 따라가기
이번에는 따라가기를 만들어 보자.
public GameObject target;
public void Update()
{
//타겟 방향으로
transform.position = Vector3.MoveTowards(transform.position, target.transform.position, speed * Time.deltaTime);
//방향 파악
Vector3 dir = target.transform.position - transform.position;
//타겟 바라보기
Quaternion targetRotation = Quaternion.LookRotation(dir);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotateSpeed * Time.deltaTime);
}
타겟 오브젝트를 선언하고
Update함수에 이 코드를 작성,

타겟 오브젝트를 넣어주면

이렇게 된다.
2. Particle System
대부분의 VFX는 이 시스템을 이용한다.
먼저 Material이 있어야 한다.


Shader를 Alpha Blended로 세팅한다.
그럼 PNG형식 이미지가 잘 들어간 것을 볼 수 있다

Material은 Renderer에 있는 Material에 넣으면 된다.
속성강의

Start Speed 시작 속도(빨리 세팅할수록 멀리나감)
Start LifeTime 지속시간
Gravity Modifier 중력 크기

Rate over Time 파티클 생성량

발사대 설정.
Angle이 발사대의 콘 넓이
Pos, Rot, Scale 말 그대로 위치 각도 크기 조정

파티클 컬러 설정
상단 화살표들이 알파값, 하단이 색상 조정용이다.

파티클 주기 내 사이즈 변화
참고로 커브는 아래 숨겨져 있다. 평소엔 바닥에 딱 붙어있음.

렌더러 설정
Render Mode를 Billboard로 설정하면 어딜 보든 정면을 보여주는 거로 앎.
스트레치는 길쭉하게 등등,
유니티 파티클 시스템 (Particle System)- 속성
1. 유니티 파티클 시스템유니티 파티클 시스템은 작고 간단한 이미지나 메쉬를 대량으로 표현하는 데 사용하도록 만들어진 시스템이다. 파티클은 움직이도록 제어할 수도 있으며, 크기, 방향,
notyu.tistory.com
자세한 건 이분 내용 참고.
대충 이것저것 추가해서 이런 걸 만들었다.

===========================================================
새로운 인풋 시스템을 배웠다 !
파티클 시스템을 배웠다 !
