-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMeshRenderer.cs
More file actions
49 lines (44 loc) · 2.24 KB
/
Copy pathMeshRenderer.cs
File metadata and controls
49 lines (44 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
namespace CreatorEngine;
/// <summary>
/// 네이티브 <c>MeshRenderer</c>의 스크립트 쪽 얼굴.
///
/// 재질(Material)에는 별도 래퍼를 두지 않고 여기서 바로 만진다. 재질은 Entity가
/// 아니라 세대 핸들을 걸 자리가 없고, 스크립트가 하는 일도 "이 오브젝트의 재질을
/// 손본다"가 전부이기 때문이다.
///
/// 실측에서 <c>m_Material</c> 접근이 42회인데 그 중 24회가 셰이더 상수 넣기,
/// 6회가 재질 사본 만들기다.
/// </summary>
public sealed class MeshRenderer : NativeComponent
{
public string MaterialName => Native.MeshGetMaterialName(OwnerHandle);
/// <summary>
/// 재질 사본을 만들어 이 오브젝트에만 붙인다.
///
/// 재질은 기본적으로 여러 오브젝트가 공유한다. 사본을 만들지 않고 색이나 상수를
/// 바꾸면 같은 재질을 쓰는 것들이 <b>전부 함께 변한다</b>. 개별 연출을 하려면
/// 먼저 이걸 불러야 한다.
/// </summary>
public void InstantiateMaterial(string newName) => Native.MeshInstantiateMaterial(OwnerHandle, newName);
/// <summary>
/// 재질의 float 값을 이름으로 갱신한다. 이름이 틀리면 <c>false</c>다 —
/// 엔진이 조용히 실패하므로 값이 안 먹으면 이 반환값부터 확인할 것.
///
/// 상수 버퍼 이름은 받지 않는다. 라우팅은 ShaderMeta 선언이 하므로
/// 호출부가 버퍼를 고를 일이 없다(9-4에 인자를 걷었다).
/// </summary>
public bool SetMaterialFloat(string valueName, float value)
=> Native.MeshSetMaterialFloat(OwnerHandle, valueName, value);
/// <summary><see cref="SetMaterialFloat"/>의 int 판.</summary>
public bool SetMaterialInt(string valueName, int value)
=> Native.MeshSetMaterialInt(OwnerHandle, valueName, value);
/// <summary>
/// 재질의 베이스 색. 알파를 낮춰 페이드하는 데 주로 쓴다.
/// 사본을 만들지 않았다면 같은 재질을 쓰는 모든 오브젝트가 함께 바뀐다.
/// </summary>
public Color4 BaseColor
{
get => Native.MeshGetBaseColor(OwnerHandle);
set => Native.MeshSetBaseColor(OwnerHandle, value);
}
}