본문 바로가기

프로그래밍/Unity

(22)
[Unity] AssetBundle 에셋을 에셋번들에 할당 에셋 선택해 인스펙터에서 에셋 번들 생성하거나 기존 번들에 할당하면 해당 에셋은 에셋번들에 마킹된 것으로 처리된다.에셋번들은 폴더같은 계층 구조로 생성이 가능하며, 에셋번들 할당시 "상위이름/하위이름" 형태로 마킹하면계층구조로 만들어진다. ex) mybundle/material 스크립트에서 에셋 번들로 할당public class CreateAssetBundles{[MenuItem("Assets/Assign AssetBundle")]static void AssignAsset(){// 선택된 에셋Object[] assets = Selection.GetFiltered( typeof(Material), SelectionMode.DeepAssets); // SelectionMode// Un..
[unity3d] 서피스 쉐이더 정리 ShaderLab : http://liveupdate.tistory.com/336 Unity3D 쉐이더 레퍼런스 : https://docs.unity3d.com/kr/530/Manual/SL-Reference.html 서피스 쉐이더 Shader "이름" {Properties {_프로퍼티("이름", 타입) = 값} Subshaders {Tags {// 유니티 프로퍼티"RenderType"="Opaque""Queue"="Geometry+1""ForceNoShadowCasting"="True"}LOD 200 CGPROGRAM// 실제 쉐이더 cg 코드#pragme surface surf Lambert alpha struct Input {}; void surf( Input IN, inout SurfaceOutp..
[Unity] Mesh 생성 및 변경 Mesh 버텍스, uv 등의 정보를 가지고 있는 클래스로, 버텍스를 생성하거나 생성된 버텍스를 조정할 때 필요한 클래스이다. 메쉬필터(MeshFilter) 에 설정하고, 메쉬렌더러에 설정된 매터리얼로 렌더링이 이루어진다. 어찌보면 버텍스 쉐이더와 프레그먼트 쉐이더라고도 할 수 있겠다. 복잡한 내용은 없고, 그냥 버텍스 배열에 각 버텍스를 설정하고, uv 배열에 uv 설정하고, 삼각형 인덱스 잡아주고 하면 된다. 역시나 Unity Script Reference 에 자세히 나와 있어서 좀 민망.. 쩝 1. 생성 .vertices : Vector3[] vertex 배열 .uv : Vector2[] uv 배열 .triangles : int[] 삼각형 인덱스 위 배열을 설정하고, 메쉬필터의 mesh 어트리뷰트에 ..
[Unity] 인스펙터에 UI 추가하기 C#의 경우 public으로 선언된 변수(어트리뷰트)는 자동으로 인스펙터에 표시가 된다. 수치값의 경우 textbox , bool은 토글 등의 UI를 제공해 주는데, 이 UI를 커스터마이징이 가능하게 되어 있다. 이런 커스텀 UI와 관련된 클래스가 몇가지 있는데, EditorWindow : 팝업 윈도우 관련 ScriptableWizard : 확인/적용 등의 버튼을 가진 마법사 윈도우 Editor : 커스텀 에디터를 위한 기본 클래스 이는 에디터와 관련한 클래스 이므로, UnityEditor 네임스페이스를 포함해야 하고, Assets\Editor 폴더에 위치해야 한다. 인스펙터용 커스텀 에디터 1. 네임스페이스 추가 using UnityEditor; 2. 연결할 스크립트 지정[CustomEditor(typ..
2D를 위한 Plane 생성 Unity3D Plane 생성 스크립트 마법사를 사용한 Plane 생성 루틴 unity3d에서의 plane은 여러개의 버텍스와 삼각 폴리곤으로 이루어져 있다. 단순한 빌보드를 표시하기 위한 용도로서는 불필요한 버텍스가 너무 많다. 이를 4개의 버텍스와 2개의 폴리곤으로 구성하기 위해 일반적으로 동적으로 메쉬필터와 렌더러를 구성하는데, 이런 경우 Play 전에는 Scene 에 정상적으로 표시되지 않아 불편한 점이 많다. 그래서 보통 별도의 Editor 메뉴를 등록해 생성하도록 하는데, 보다 다양한 옵션 설정이 가능한 마법사 대화상자를 이용하는 방법이 있어 소개한다. 링크 [ http://www.unifycommunity.com/wiki/index.php?title=CreatePlane ] 동적생성이 아닌 ..
Physics.Raycast 물체를 이동시킬때 이동하는 방향이 막혔는지의 여부를 알거나 현재 화면상의 객체를 선택(피킹)할때 가상의 레이저(직선)을 그어 collider 여부를 검사할 수 있다. 레이캐스팅 특정 위치에서 해당 방향으로, 거리내에 collider가 있는지 확인하는 메쏘드. 모두 static 함수들이다. RaycastHit은 출력인자이며, 레이캐스트로 검출된 오브젝트의 여러 정보를 가지고 있다. Physics.Raycast( 위치벡터, 방향 벡터, 거리=Mathf.Infinity, 레이어 마스크 ); Physics.Raycast( 위치벡터, 방향벡터, RaycastHit , 거리, 레이어 마스크); Physics.Raycast( Ray , 거리, 마스크 ); Physics.Raycast( Ray, RaycastHit, ..
2D 게임을 위한 몇가지 unity3d 홈에서는 여러 튜토리얼을 제공하는데, 2D Platformer 튜토리얼도 제공한다. 2D 형태의 플랫포머 장르를 위한 기본적인 내용을 다루고 있다. 물론, 실제로 동작은 3D 이지만 내부적인 제한을 두어 2D처럼 보이도록 하고 있다. 카메라 프로젝션을 Orthographic으로 설정하면, 더욱 2D 느낌이 나타난다. 해당 튜토리얼 내용 중 알아두어야 할 몇 가지에 대해서만 기술한다. 1. 바닥 설치 바닥은 여러 가지 타일로 각각 collider를 포함하고 있다. 별도의 강체 적용이 되어 있지 않으므로, 특별한 설정이 필요치 않다. 2. 움직임 튜토리얼에는 두가지 형태의 캐릭터 컨트롤을 보여준다. CharacterController 를 사용하는 캐릭터와 Rigidbody+Collider 를 ..
터치 입력 * unity3d 관련 포스팅은 개인적인 정리용도임. 대부분 레퍼런스상의 내용과 자주 사용될(?)만한 녀석들에 대한 내용만 기술. 1. 입력 확인 unity3d 에서 터치 입력을 위해 Touch 라는 객체를 제공한다. 다른 입력과 마찬가지로 Input 객체를 통해 입력된 객체를 받아올 수 있는데, 터치의 경우 Touch 객체가 반환된다. 멀티터치의 경우 Touch 배열이 반환되므로, 다양하게 사용할 수 있다. // 가장 처음의 터치 입력을 가져오는 경우. Touch touch = Input.touches[0]; foreach를 사용해 모든 터치를 가져와 처리할 수 있다.(레퍼런스) int fingerCount = 0; foreach( Touch touch in Input.touches ) { if( to..