![유니티 에셋공부 <Feel> - (1)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxYrZx%2FbtrWCH4Oxfj%2FxvhGrVmoVEK718VvmhJoJ0%2Fimg.gif)
DOTween 에셋도 한참 남았다고 생각 하지만..
익혀둬야할 에셋이 3개나 있어서 이것저것 같이 보고 있다.
이번에 공부해본 에셋은 Feel 이다.
Feel | Particles/Effects | Unity Asset Store
Feel | Particles/Effects | Unity Asset Store
Use the Feel tool for your next project. Find this and more particle & effect tools on the Unity Asset Store.
assetstore.unity.com
DOTween은 기능 개발에 도움을 준다면, FEEL은 연출에 대한 부분을 도와주는 에셋이다.
Feel을 제작한 More Mountains 에서 직접 올린 튜토리얼 영상이다.
내가 못찾은건지 잘 정리되어있는 한국 블로그가 없어서 .. 일단 보면서 간단한 사용법을 익히려고 한다.
Getting started | Feel Documentation (moremountains.com)
Getting started | Feel Documentation
This page explains how to quickly get started with `Feel` Introduction In this page we’ll follow a very simple tutorial, going over a common use case : wanting to be able to add some juice to an existing game. We’ll start from scratch, create a very (v
feel-docs.moremountains.com
기본 준비
영상의 초반부에는 그냥 큐브로 3D 오브젝트의 위치와 컴포넌트를 세팅하는 부분이 나온다.
큰 큐브와 작은 큐브, 스카이박스의 매터리얼은 전부 Feel에서 제공해주는 매터리얼들이다.
바닥의 큰 박스는 Ground라는 이름으로 설정해줬다.
위의 검은 박스는 영상에선 'Hero'라고 칭한다.
최 상단의 'Hero'는 모델이 없는 빈 껍데기다.
박스 콜라이더와 리지드바드만 가지고 있다.
'Hero'의 자식인 'Model'은 모델링만 가지고 있다.
이렇게만 설정해두면 오브젝트 배치의 준비는 끝이난다.
스크립트 만들기
영상에서는 'GettingStartedTutorialHero' 라는 이름의 스크립트를 만들어서 작업을 한다.
상단에 올려놓은 튜토리얼 사이트에 코드가 작성되어있다.
그냥 그대로 복붙해오면 된다.
(들어가기 싫은 분들은 그냥 아래 코드 복사)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MoreMountains.Feedbacks;
using UnityEngine.Events;
/// <summary>
/// A very simple class used to make a character jump, designed to be used in Feel's Getting Started tutorial
/// </summary>
public class GettingStartedTutorialHero : MonoBehaviour
{
[Header("Hero Settings")]
/// a key the Player has to press to make our Hero jump
public KeyCode ActionKey = KeyCode.Space;
/// the force to apply vertically to the Hero's rigidbody to make it jump up
public float JumpForce = 8f;
[Header("Feedbacks")]
/// a MMFeedbacks to play when the Hero starts jumping
public MMFeedbacks JumpFeedback;
/// a MMFeedbacks to play when the Hero lands after a jump
public MMFeedbacks LandingFeedback;
private const float _lowVelocity = 0.1f;
private Rigidbody _rigidbody;
private float _velocityLastFrame;
private bool _jumping = false;
/// <summary>
/// On Awake we store our Rigidbody and force gravity to -30 on the y axis so that jumps feel better
/// </summary>
private void Awake()
{
_rigidbody = this.gameObject.GetComponent<Rigidbody>();
Physics.gravity = Vector3.down * 30;
}
/// <summary>
/// Every frame
/// </summary>
private void Update()
{
// we check if the Player has pressed our action key, and trigger a jump if that's the case
if (Input.GetKeyDown(ActionKey) && !_jumping)
{
Jump();
}
// if we're jumping, were going down last frame, and have now reached an almost null velocity
if (_jumping && (_velocityLastFrame < 0) && (Mathf.Abs(_rigidbody.velocity.y) < _lowVelocity))
{
// then we just landed, we reset our state
_jumping = false;
}
// we store our velocity
_velocityLastFrame = _rigidbody.velocity.y;
}
/// <summary>
/// Makes our hero jump in the air
/// </summary>
private void Jump()
{
_rigidbody.AddForce(Vector3.up * JumpForce, ForceMode.Impulse);
_jumping = true;
}
}
코드를 뜯어보면 그냥 스페이스를 누르면 점프를 하게 하는게 전부다.
하지만 우리가 여기서 눈여겨 봐야할것은 'MMFeedbacks' 형 변수이다.
점프 피드백, 랜딩 피드백이라는 변수명으로 사용하고 있다.
이'MMFeedbacks'가 FEEL이라는 에셋에서 사용하는 효과연출 컴포넌트다.
스크립트를 복사해와서 따로 수정을 안했다면, 50번째 줄 if문에 아래와 같은 코드를 작성해준다.
랜딩 피드백 변수가 널이아니라면 플레이 해준다는 코드다.
또 64번째 줄 코드 Jump함수에도 점프 피드백의 재생을 똑같이 넣어준다.
마지막으로 'Hero' 에게 방금 작업한 스크립트를 붙여주면된다.
(피드백은 아래서 세팅함)
MMFeedbacks 세팅
히어로의 자식으로 점프 피드백과, 랜딩 피드백이라는 빈 자식오브젝트를 만들어준다.
다른 스크립트를 추가 하듯이, MMFeedbacks를 검색해서 추가를 해주면 된다.
Add new feedback을 눌러보면 상당히 많은 항목들이 나오는데,
점프 피드백은
1. Transform - Rotation
2. Audio - Sound
랜딩 피드백은
1. Audio - Sound
2. Camera - Cinemachine Impulse
이렇게 2개씩을 추가해주면 된다.
점프 피드백 설정
로테이션은 위와 같이 세팅해줬다.
다른 값은 원하는대로 변화를 줘도 상관없지만, Rotation Target에 ' Model ' 을 꼭 넣어줘야 한다.
(Hero가 실제로 돌지 않고 모델만 돌게 하기위해)
사운드 값은 위와같이 설정해주었다.
Sound에 효과음을 정해주어야 하고,
Method를 꼭 Cached로 변경해주어야 한다.
랜딩 피드백 설정
사운드는 점프 피드백과 똑같이 설정해주면 된다.
아래부터는 Cinemachine을 이용하여 카메라 효과를 내니,
시네머신이 없다면 패키지매니저 - Unity Registry에 들어가서 깔고 하면 된다.
Cinemachine Impulse는 Signal Shape에 '6D Shake' 라는 카메라 효과를 적용해주고,
맨 아래에 Velocity로 흔들리는 정도를 설정해주면 끝이다.
시네머신 버추얼 카메라를 만들어서,
Cinemachine Impulse Listener 컴포넌트를 추가해주면 끝이다.
피드백 넣기
아까 'Hero' 오브젝트에 부착해둔 스크립트에 방금 만든 피드백들을 넣어주면 끝이다.
완성
스페이스를 누르면 소리와 함께 상자가 점프하며 한바퀴 돌고, 착지할때도 소리가나며 카메라가 흔들린다.
MMFPS Counter / Unlock
FEEL은 FPS를 띄워주는 FPS Counter와 프레임을 고정시키는 기능을 제공한다.
그냥 캔버스안에 빈 오브젝트를 만들어서 MMFPS Counter를 만들어주면 자동으로 text 가 생기는데,
그냥 이런식으로 프레임이 나온다.
MMAutoRotate
그냥 자동으로 회전하는걸 도와주는 스크립트다.
작은 하얀색 박스를 만들어서 스크립트를 붙여주고 Y축을 회전시켰다.
잘 돌아간다.
이번에는 Orbiting을 키고 Hero를 중심으로 돌게 만들었다.
속도는 10은 너무 느려서 1000을 주었다.
Hero를 중심으로 잘 돌아간다.
MMFollowTarget
이름 그대로 Target을 따라하는 스크립트다.
우리의 Hero를 따라할 4개의 큐브를 만들어주었다.
실제로는 Hero가 아닌 안에 Model이 도는것이기 때문에, Target을 Model로 두었다.
그리고 Model의 포지션의 Y값과 로테이션값만 따라하게 만들었다.
작은 상자들이 우리의 Hero를 아주 잘 따라한다.
마치며..
중간에 포스트 프로세싱을 만져서 렌즈를 왜곡하는 기능까지 설명을 해줬었는데..
포스트 프로세싱 받기가 귀찮아서 안했다.
영상에는 있으니 해보실분들은 따라 해보셔도 좋을 것 같다.
또 FEEL은 상당히 많은 양의 데모를 제공하는데,
난 일단 2D가 필요하니.. FEEL 소개 영상중에 있었던..
요 오리녀석의 데모 씬을 한번 파볼예정이다.
'게임 엔진 > Unity' 카테고리의 다른 글
유니티 노치, 펀치홀 디자인 대응하기 (0) | 2023.02.26 |
---|---|
유니티로 구글 애드몹(AdMob) 테스트 해보기 (0) | 2023.01.29 |
유니티 에셋공부 <DOTween Pro> - (3) (0) | 2023.01.18 |
유니티 에셋공부 <DOTween Pro> - (2) (0) | 2023.01.17 |
유니티 에셋공부 <DOTween Pro> - (1) (2) | 2023.01.15 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!