찾기
내용으로 건너뛰기
추적
문서의 이전 판을 선택했습니다!
저장하면 이 자료로 새 판을 만듭니다.
미디어 파일
======예: Billboard 평면 생성하기====== 유니티는 평면 원시 객체를 가지고 있는데 이것은 2D 게임이나 GUI에 유용한 간단한 평면이며 어쨌든 좋은 예의 시작입니다. 최소한의 평면은 두개의 삼각형으로 각 구석을 정의하는 네개의 꼭지점으로 이루어져 있습니다. 첫째로 꼭지점 배열을 설정합니다. 평면은 XY축에 있고 넓이와 높이는 파라미터로 정해진다고 가정합니다. 꼭지점의 순서는 왼쪽 아래, 오른쪽 아래, 왼쪽 위, 오른쪽 위의 순서로 제공합니다. {{:unity3d:MeshConstruction.png}} <file csharp>var vertices: Vector3[] = new Vector3[4]; vertices[0] = new Vector3(0, 0, 0); vertices[1] = new Vector3(width, 0, 0); vertices[2] = new Vector3(0, height, 0); vertices[3] = new Vector3(width, height, 0); mesh.vertices = vertices;</file> (메쉬 데이터 속성은 씬 뒤에서 코드를 실행시키므로 데이터를 사용자 자신의 배열에 설정하고 이것을 속성에 할당하는 것이 속성을 배열의 요소별로 접근하는 것보다 효율 적입니다.) 다음은 삼각형 입니다. 두 개의 삼각형을 원하므로 각 삼각형은 세 개의 정수로 정의되며 삼각형 배열은 총 여섯개의 요소를 가집니다. 각 구석을 시계 방향으로 정의하는 것을 생각 했을 때, 왼쪽 아래 삼각형은 0, 2, 1을, 오른쪽 위 삼각형은 2, 3, 1을 코너 색인으로 사용합니다. <file csharp>var tri: int[] = new int[6]; // Lower left triangle. tri[0] = 0; tri[1] = 2; tri[2] = 1; // Upper right triangle. tri[3] = 2; tri[4] = 3; tri[5] = 1; mesh.triangles = tri;</file> 꼭지점과 삼각형으로만 이루어진 메쉬는 에디터에 보이긴하지만 설득력이 있지만 않습니다. 왜냐하면 법선없이 정확히 그림자지워지지 않기 때문입니다. 평면의 법선은 매우 간단한데 모두 같고 평면의 로컬 스페이스에서 Z의 음방향을 가리킵니다. 법선이 추가되면서 평면은 정확히 그림자를 만들지만 화면에서 효과를 보기 위해서는 빛이 필요합니다. <file csharp>var normals: Vector3[] = new Vector3[4]; normals[0] = -Vector3.forward; normals[1] = -Vector3.forward; normals[2] = -Vector3.forward; normals[3] = -Vector3.forward; mesh.normals = normals;</file> 마지막으로, 텍스쳐 좌표를 메쉬에 추가하는 것은 재료를 정확히 나타내는 것을 가능하게 합니다. 이미지 전체를 평면에 걸쳐 보여주고 싶다고 가정한다면 텍스쳐의 코너에 따라 UV값은 모두 0또는 1이 될것입니다. <file csharp>var uv: Vector2[] = new Vector2[4]; uv[0] = new Vector2(0, 0); uv[1] = new Vector2(1, 0); uv[2] = new Vector2(0, 1); uv[3] = new Vector2(1, 1); mesh.uv = uv;</file> 완성된 스크립은 아래와 같을 것입니다:- <file csharp>var width: float; var height: float; function Start() { var mf: MeshFilter = GetComponent(MeshFilter); var mesh = new Mesh(); mf.mesh = mesh; var vertices: Vector3[] = new Vector3[4]; vertices[0] = new Vector3(0, 0, 0); vertices[1] = new Vector3(width, 0, 0); vertices[2] = new Vector3(0, height, 0); vertices[3] = new Vector3(width, height, 0); mesh.vertices = vertices; var tri: int[] = new int[6]; tri[0] = 0; tri[1] = 2; tri[2] = 1; tri[3] = 2; tri[4] = 3; tri[5] = 1; mesh.triangles = tri; var normals: Vector3[] = new Vector3[4]; normals[0] = -Vector3.forward; normals[1] = -Vector3.forward; normals[2] = -Vector3.forward; normals[3] = -Vector3.forward; mesh.normals = normals; var uv: Vector2[] = new Vector2[4]; uv[0] = new Vector2(0, 0); uv[1] = new Vector2(1, 0); uv[2] = new Vector2(0, 1); uv[3] = new Vector2(1, 1); mesh.uv = uv; }</file> 코드가 Start함수에서 한 번 실행이되면 메쉬는 게임 동안 계속 같은 상태를 유지합니다. 그러나 Update함수에 코드를 추가함으로써 프레임마다 메쉬를 바꾸는 것이 가능합니다(이것은 CPU오버헤드를 상당히 높힙니다). {{tag>유니티 unity}} * 출처: [[http://unitykoreawiki.com/index.php?n=KrMain.ExampleCreatingaBillboardPlane|유니티코리아위키]] (CC BY-NC-SA 2.0)
2+1?
이 필드는 비어 있도록 유지하세요:
저장
미리 보기
취소
편집 요약
참고: 이 문서를 편집하면 내용은 다음 라이선스에 따라 배포하는 데 동의하는 것으로 간주합니다:
CC Attribution-Noncommercial-Share Alike 4.0 International
문서 도구
문서 보기
이전 판
연결문서
맨 위로
다크 모드로 보기
☀️
Toggle Menu
유니티3D ( Unity3D )
너두 고쳐두 됩니다.
사이트 도구
최근 바뀜
미디어 관리자
사이트맵
사용자 도구
등록
로긴
최근 수정된 문서
misuse_topical5
노박
unique_items
dinner_bell
deputy_beagle
ratslayer
one_for_my_baby
alerio
power_fist
제거됨
fixer
climb_ev_ry_mountain
companion
[장비 분실]
crashed_vertibird
brotherhood_t-51b_power_armor
marco
i_forgot_to_remember_to_forget
cateye