인벤토리 아이템 개수가 보이는 슬롯의 개수를 초과했을 때 스크롤 뷰로 처리하면 된다.

적용방법

생성 or 기존 이미지의 컴포넌트 추가

추가할 때는 UI -> Scroll View을 만들어준다.

나는 기존의 만든 이미지의 컴포넌트를 추가했다.

 

컴포넌트 살펴보기

Movement Type : 밑에 설명

Viewport : 표시하고자 하는 콘텐츠가 보일 배경? 공간

Content : 표시하고자 하는 슬롯

Scrollbar Horizontal/Vertical :  수평/수직 스크롤바

 

나 같은 경우는 수평 스크롤바는 필요 없으니 뺐다.

쉽게 슬롯들은 Content자식으로 넣어두면된다.

(Grid LayOut을 이용해 슬롯을 정렬)  

 

Movement Type

Unrestricted : 콘텐츠들이 드래그한곳으로 움직이며, 되돌아오지 않음

Elastic : 스크롤 영역 밖으로 나가도  다시 돌아옴

Clamped : 아예 못 나감

 

스크롤바와 Grid LayOut은 다른글에 포스팅하도록 해야겠다.

반응형

셰이더코드없이 노드구조로 셰이더효과를 낼 수 있는 어셋

 

어셋을 활용하기 위해서는 쉐이더의 기본용어는 알아두는게 좋다

UV좌표 : 텍스쳐 이미지를 3차원 공간의 폴리곤에 입히기위해 변환 기준이 되는 2차원 좌표계

UV 매핑 : D:2차원 그림을 3차원 모델로 만드는 3차원 모델링 프로세스

(자세한설명  https://kblog.popekim.com/2011/12/03-part-1.html)

 

그래픽스 파이프라인

3차원 컴퓨터 그래픽스에서 그래픽스 파이프라인(graphics pipeline) 또는 렌더링 파이프라인(rendering pipeline)은 3차원 이미지를 2차원 래스터 이미지로 표현을 하기위한 단계적인 방법

 

Shadero Sprite - 2D Shader Editor 사용방법

어셋다운로드

에셋을 다운로드하고 열면 이런 에디터화면이 나온다. 여기서 작업을하게된다.

Build Shader 생성

마우스 오른쪽 클릭 -> Build Shader 선택

 

Shadero Sprite Shader 스크립트 생성

유니티 프로젝트창에서 마우스 오른쪽 클릭

쉐이더 코드를 적용할 머테리얼도 같이 생성

 

쉐이더 코드 넣기

아까 생성한 쉐이더코드를 드래그앤드롭으로 놓는다.

머테리얼도 넣어둔다

 

적용할 이미지(텍스처) 추가

New Texture를 누르고 Select를 통해 원하는(쉐이더를 적용할) Sprite이미지를 선택한다.

 

Build Shader로 선을 이어준다

그러면 우측상단에 결과적용 이미지가 출력되는것을 볼 수 있다.

 

 

기본적인 효과설명

4Gradients

위치마다 다른 그라데이션효과

Twist UV 효과 UV->FX(UV)

Burn 효과  RGBA -> FX -> Burn FX

PlasmaFX

Gold효과

적용방법

쉐이더코드를 머테리얼에 적용후 그 머터리얼을 sprite에 적용

 

번외

쉐이더 그래프

유니티자체에도 쉐이더를 노드구조로 그리는 기능이 있음

프로젝트 생성할때 설정해주고 만들어야 쉐이더 그래프를 사용이 가능하다.

2018버전 Preview
2019버전 이상

튜토리얼 https://www.youtube.com/watch?v=VvK7sLbbLYE

 

반응형

랜더텍스처

 

Render Texture는 런타임에서 생성 및 갱신되는 특수한 Texture입니다. 사용하려면 먼저 새 렌더 텍스처를 만들고 Cameras 중 하나를 지정하여 거기에 렌더링합니다. 이제 정상적인 텍스처처럼 Material의 렌더 텍스처를 사용할 수 있습니다. Unity 표준 에셋의 Water 프리팹은 실시간 반사와 굴절을 생성하기 위해 렌더 텍스처를 실제 월드상에 사용하는 예입니다.

<https://docs.unity3d.com/kr/530/Manual/class-RenderTexture.html>

 

 

카메라가 비추는 화면을 다른 특정 이미지에서 보여줄 때 사용했다. 

 

1. 랜더텍스처 생성

랜더 텍스처를 생성한다.

2. 카메라 추가

일단 특정 오브젝트를 비추는 카메라가 있어야 한다. 그렇기에 카메라를 추가하고 

이곳에 아까 생성한 랜더 텍스처를 추가한다.

3. Raw 이미지 추가

Raw 이미지를 추가한다. 이 이미지 크기로 카메가 비추는 화면이 보이게 된다. 적절히 크기를 설정해주고

이쪽에도 랜더 텍스처를 넣어준다.

4. 추가 작업

 

보이긴 하는데 뒷배경도 나와 보기가 별로다. CullingMask를 통해 보일 오브젝트만 레이어로 분류하면 된다.

나 같은 경우는 ClearFlag를 Solid로 바꿔서 캐릭터만 보이도록 했다.

 

 

 

 

 

반응형

2D Physics


유니티에는 3D와 마찬가지로 2D에도 물리 시뮬레이션 엔진이있다. 

Rigidbody2DCollider 2D가 대표적인 컴포넌트이다.


일단 가장 기본적으로 2D 물리에서는 position Z값은 의미가 없다.


간단히 테스트를 해보면


박스는 position Z값 15 

막대는 position Z값 0


에디터 3D모드로 보면 막대와 박스가 떨어져 있지만 박스는 막대에 물리가 적용되어 지나가지 않는다.

2D는 Z값을 변경이 가능하지만 2D Physic는 물리상호작용은 Z가 0에서 일어난다 





Hinge Joint 2D

2D에도 Hinge Joint가있다.



Anchor

어떻게 회전할 것 인지를 선택할 수 있다.


Connected Anchor

씬 어디서 배치될것 인가를 설정하는 곳이다.
이 값은 연결된 본체의 Local Space에있다.






https://www.youtube.com/watch?time_continue=5&v=l6awvCT29yU

참고 : https://www.youtube.com/watch?v=xEVXE7_YILk&feature=youtu.be

반응형

Physics 2D Manager






물리가 자세하게 필요한 게임이라면 여기서 설정을 통해 원하는 방식의 게임으로 제작이 가능할 것같다.

유니티 도큐에서 보면 질량의무게, 속도 임계값, 선형보간등을 설정이 가능하다.


이번에 테스트 한 것은 맨 밑에 많은 체크박스로 이루어진

Layer Collision Matrix이다. 


Layer Collision Matrix 레이어에 따른 충돌여부를 설정할 수 있다.

간단하게 테스트로 해보았다. 



1번 막대에는 레이어를 Default로 설정하고

2번 막대에는 ground로 설정했다. 

그리고 1,2번막대에는 모두 충돌체크를 할 수있도록 Collider컴포넌트를 추가했다.

그런다음 player와 Default 레이어에 해당하는 체크박스는 해제한다.


이제 player를 떨어트려보면.


예상으로는 막대에 콜라이더가 있기 때문에 1번막대에서 서있을것이다.




하지만 1번 막대를 통과하고 2번막대는 통과하지 못한다.


Layer Collision Matrix에서 설정한대로 player는 ground만 충돌 체크를 하게된다. 


활용도는 점프가 가능한 지형(통과 가능한)과 점프가 불가능한(통과하지 못하는)지형으로


구분하여 게임의 재미요소를 추가가 가능할 것같다.




참고 : https://docs.unity3d.com/kr/530/Manual/class-Physics2DManager.html

반응형

유니티 타일맵


유니티에서 제공하는 타일맵으로 맵을 쉽게 제작이 가능하다.




Grid

Grid : UI의 canvas같은 존재

Cell Size : 타일 하나의 크기


Tilemap Renderer

Sprite Renderer과 같은 기능


Tile Palette

타일을 모아놓은 콜렉션 에셋




타일을 클릭하고 붓을 칠하듯 찍으면 된다.

삭제 : Shit버튼을 누른상태에서 칠하거나 지우개툴을 선택

회전 : ‘[‘ , ‘]’ 버튼 이용




타일맵 충돌처리

타일맵전용 Collider가 따로 있음


콜라이더 합치기

이 파란색 영역역은 캐릭터가 닿지 않는 부분으로 Collider 각각 들어가 있는것은 비효율적이다


Composite Collider2D를 추가하고 TileMap Collider -> use by Composite를 체크해주면

콜라이더가 한개로 합쳐진다.

Rigidbody 속성을 바꿔줘야 맵이 떨어지지 않는다.


강의 참고 : https://youtu.be/dtpthaIYa8g?list=PL412Ym60h6uunDV_SaHfBXzfMhBjOFTnj

반응형

룰타일 & 타일맵 레이어

    



룰타일

룰타일은 추가적인 다운로드가 필요하다.


https://github.com/Unity-Technologies/2d-extras

위 그림처럼 타일을 칠 할때 이미 설정해 놓은 룰에 맞게 칠 할 수 있다.




생성

Create - > Rule Tile

x : 해당 방향으로 타일이 칠 할수 없다

화살표 : 해당 방향으로 타일을 칠 할 수 있다.


생성한 룰타일은 TilePalets에 옮기면 생성이된다.


칠하기

룰의 맞게 색칠해 진다.



타일맵 레이어

타일맵에서도 레이어를 나누어 주변지물, 또는 배경을 표현할 수 있다.

(ex) 캐릭터 뒤에있는 나무 캐릭터 앞에있는 나무 통과는 되지만 캐릭터가 화면에 안보이는)


레이어 추가

Tile map 하나를 더 생성해주고

Tilemap Renderer -> Sorting Layer를 Background로 바꿔준다.

(칠하려는 타일은 색칠할 렌더러 속성을 받지 않고 칠하는 팔레트에 속성을 받기 때문에, 팔레트에서 Active Tilemap을 background를 수정해줘야한다.)


씬화면에서 Foucs On설정으로 타일맵만 볼수 있다.

유니티코리아  유튜브 타일맵 튜토리얼을 보고 작성



나무 -> Background

폭포 -> foreground


https://youtu.be/EZgvwvPcimQ

반응형

파티클 시스템(Particle System)








파티클 시스템은

씬 안에 다수의 작은 2D 이미지를 생성하고 애니메이션하여 액체, 구름 및 불 꽃 같은 유체 엔티티를 시물레이션 한다

3D게임에서 대부분의 캐릭터, 소품 및 풍경 요소는 Meshes로 표현되고, 2D는 Sprite를 이러한 용도로 사용한다.


형태가 표현이 가능한 Meshe와 Sprite


<3D> 


<2D>


Mesh와 Sprite는 형태가 뚜렷한 "솔리드"오브젝트를 그리는 가장 이상적인 방법이다.

하지만 Mesh와 Sprite로 표현하기 어려운 것들이 있다.


예를들어 모닥불에 피어 오르는 연기, 총구에 나오는 화염, 리얼하게 표현 되어야 할 마법스킬등 

정해진 물체에 그리는것처럼 형태가 없기 때문에 표현하기는 불가능한 것들이다.


이런것들은 파티클이라는 그래픽스방식을 이용해야 한다.

(그래픽스? : 실시간으로 이루어지는 유동적인 효과를 나타낼때 사용)


파티클 단어 자체가 작은 입자라는 뜻인데 이런 작은 입자(작은 메시와,sprite)가 모여 

큰 모양을 만들어 표현하기 어려운 것들을 보다 자연스럽게 표현한다고 생각하면 된다.



파티클 컴포넌트

Duration : 파티클이 실행되는 시간

Looping : 반복 여부

Start Delay : 파티클시스템이 기다리는 시간, 값이 높을 수록 늦게 시작

Start LifeTime : 파티클의 수명




방사 모듈<Emission Module>

시간의 경과에 따라 방사되는 파티클의 양이나 거리

Bursts : 파티클의 용출 횟수를 조절한다.


<기본>

<1개 추가함>




형태 모듈<Shape Module>

Shape : 파티클 형태를 선택할 수 있다.

<Edge형태>




충돌 모듈<Collision Forces>

파티클 충돌처리

World / Planes : World와 Planes 선택가능


<Planes>형태 

게임의 바닥을 Planes으로 지정했을 경우 cube를 무시하고 파티클이 재생된다.

<world>형태

cube등 주위 오브젝트를 감지하여 불꽃이 빚겨나간다.


Send Collision Messages : 충돌처리에 대한 메세지를 받을 수 있다.

   void OnParticleCollision(GameObject other)

    { 

        Debug.Log("파티클 충돌");

    }

파티클을 체크하고 충돌 메세지를 받을 오브젝트에 스크립트를 추가한다.



추가적인 내용은 유니티 도큐먼트를 참고

https://docs.unity3d.com/kr/2017.4/Manual/PartSysMainModule.html

https://docs.unity3d.com/kr/2017.4/Manual/class-ParticleSystem.html

반응형

TrailRenderer





Description

trail 렌더러는 오브젝트 뒤에서 씬에서 오브젝트가 움직일 때, 해당 오브젝트 뒤를 따라 움직이도록 할 때에 사용됩니다.


TrailRenderer은 유니티에서 제공하는 기본컴포넌트이다.


TrailRenderer 컴포넌트 추가하기

우선 발사체(오브젝트)에 TrailRenderer컴포넌트를 추가한다.


테스트1

총알을 발사해보면 발사체가 이동했던 경로를 그린다.



Material생성

총알처럼 효과를 주기 위해


material을 생성하고 이미지를 Albedo에 넣어준다.

Shader모드를 변경한다. 그래야 더 발사체 효과같기 때문에 변경해준다.


생성한 Material 추가

그런 다음 TrailRenderer컴포넌트에 효과이미지를 추가한 메테리얼을 넣어준다.

Materials 트레일을 렌더링하는 데 사용하는 Material의 배열

size: 배열의 요소 수

Time : 트레일의 길이(단위 초)


Width

곡선의 기울기에 따라 트레일을 넓이를 조절 할 수있다.

Width가 굵을 수록 실제 보여지는 발사체효과도 굵어진다고 보면 된다.

 

그래프에서 왼쪽부분이 발사체 종료부분(=끝나는 부분)

그래프에서 오른쪽부분이 발사체 시작부분(=발사부분에 가까운 부분)


참고: https://docs.unity3d.com/kr/530/Manual/class-TrailRenderer.html

반응형

3D 물리 Physics #1






Adding Physics Forces



마우스를 클릭하면 forward방향으로 물리적 힘을 가해지도록 해보겠습니다.


private void OnMouseDown()

{

Debug.Log("클릭");

Rigidbody Rigidoor = DOOR.GetComponent<Rigidbody>();

Rigidoor.AddForce(transform.forward * 1500);

}


Rigidoor.AddForce(transform.forward * 1500.ForceMode.);

ForceMode. 뒤에 설정값을 다르게 줄수도 있습니다.

ForceMode.Force : 질량의 영향값을 받아 작동, 연속적인 힘을 가하는 경우

ForceMode.Accelration 질량의 영향값 받지 않고 작동, 가속력

ForceMode.Impulse : 질량의 의해서 순간적으로 변함

ForceMode.VelocityChange : 질량의 영향받지 않고 짧은 순간에 적용

예상했던 장면이 나오지 않는다면 ForceMode를 바꿔보는것도 좋을것 같습니다.



private void OnTriggerStay(Collider other)

{

Rigidbody trigger = other.GetComponent<Rigidbody>();

trigger.AddForce(Vector3.up * 20f,ForceMode.Acceleration);

}


OnTriggerStay를 통해 이런 장면도 연출이 가능하겠죠?? 




Adding Physics Troque

이번에는 축을 중심으로 회전을 주겠습니다.

private void OnMouseDown()

{


Rigidbody RigObj = obj.GetComponent<Rigidbody>();

RigObj.AddTorque(transform.up * 1500);

RigObj.AddTorque(transform.right *2000);

}


RigObj.AddTorque(0, 10, 0); 이렇게도 사용이 가능합니다.

Forces와 마찬가지로 ForceMode 설정이 가능합니다.




#2에서는 픽스조인트,스프링조인트,피직스메티리얼에 대해서 알아보겠습니다








반응형

Character Controller


캐릭터 컨트롤러(컴포넌트)

캐릭터 컨트롤러(CharacterController)는 리지드바디(rigidbody)를 다루지 않고,

충돌에 의한 움직임을 다루기 쉽도록 해준다.


캐릭터 컨트롤러는 힘(관성, 중력 등)에 의해 영향을 받지 않고, Move함수가 호출되었을 때만 움직이게 됩니다.

충돌에 의해 힘이 가해졌을 때에만 움직임을 수행한다.


Slope Limit : 경사의 한계를 도의 단위로 나타낸다.

stepOffset : 캐릭터 컨트롤러의 단위의 스텝 오프셋값을 나타낸다(설정 값보다 낮은 높이의 계단만 오를 수 있다.)

Skin Width:  미터단위의 오프셋 설정값보다 낮은 계단만 오를 수 있다.

Center : 플레이의 무게중심

Radius : 캡슐의 반지름

Height : 캐릭터의 캡슐의 높이




CharacterController가 사용할 수 있는 기능과 설정



void Start ()

{

m_Ctrl = GetComponent<CharacterController>(); //컴포넌트에 접근하기 위해 m_Ctrl 필드명을 설정해준다.


}

void Update()

{

if( m_Ctrl.isGrounded == true ) //캐릭터가 땅에 위치하면

{

float fRot = fRotSpeed * Time.deltaTime;

float hor = Input.GetAxis("Horizontal");

float ver = Input.GetAxis("Vertical");

transform.Rotate(Vector3.up * hor * fRot); //Rotate(회전할 기준 좌표 축 * 변위값 * 회전속도)


moveDir = new Vector3(0, 0, ver * fMoveSpeed); //왼쪽과 오른쪽 키보드입력은 이동이 아닌 방향을 바꿈

//캐릭터는 앞으로만 움직이기 때문에 Vertical만 Vector값을 설정한다.

moveDir = transform.TransformDirection(moveDir); //로컬 좌표계 -> 월드 좌표계

if( Input.GetButton("Jump") == true )

{

moveDir.y = fJumpSpeed; //점프 버튼(스페이스바) 입력시 y축으로 힘을 준다.

}

}

}




반응형

+ Recent posts