Skip to content

Commit

Permalink
static 変数の管理はやめて、定数置き場になった
Browse files Browse the repository at this point in the history
  • Loading branch information
ousttrue committed Sep 9, 2021
1 parent 8a17ff9 commit 715006a
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,9 @@ public static class Vrm10FirstPersonLayerSettings
{
public const int DEFAULT_FIRSTPERSON_ONLY_LAYER = 9;
public const string FIRSTPERSON_ONLY_LAYER_NAME = "VRMFirstPersonOnly";
public static int FIRSTPERSON_ONLY_LAYER = DEFAULT_FIRSTPERSON_ONLY_LAYER;

public const int DEFAULT_THIRDPERSON_ONLY_LAYER = 10;
public const string THIRDPERSON_ONLY_LAYER_NAME = "VRMThirdPersonOnly";
public static int THIRDPERSON_ONLY_LAYER = DEFAULT_THIRDPERSON_ONLY_LAYER;

// If no layer names are set, use the default layer IDs.
// Otherwise use the two Unity layers called "VRMFirstPersonOnly" and "VRMThirdPersonOnly".
public static bool TriedSetupLayer = false;

public static int GetLayer(int? arg, string name, int fallback)
{
Expand All @@ -30,25 +24,14 @@ public static int GetLayer(int? arg, string name, int fallback)
return fallback;
}

/// <summary>
/// Set the VRM first person layer globally.
///
/// argument > name > constant
///
/// Only run first.
/// </summary>
/// <param name="firstPersonOnlyLayer"></param>
/// <param name="thirdPersonOnlyLayer"></param>
public static void SetupLayers(int? firstPersonOnlyLayer = default, int? thirdPersonOnlyLayer = default)
public static int GetFirstPersonOnlyLayer(int? arg)
{
if (TriedSetupLayer)
{
return;
}
TriedSetupLayer = true;
return GetLayer(arg, FIRSTPERSON_ONLY_LAYER_NAME, DEFAULT_FIRSTPERSON_ONLY_LAYER);
}

FIRSTPERSON_ONLY_LAYER = GetLayer(firstPersonOnlyLayer, FIRSTPERSON_ONLY_LAYER_NAME, DEFAULT_FIRSTPERSON_ONLY_LAYER);
THIRDPERSON_ONLY_LAYER = GetLayer(thirdPersonOnlyLayer, THIRDPERSON_ONLY_LAYER_NAME, DEFAULT_THIRDPERSON_ONLY_LAYER);
public static int GetThirdPersonOnlyLayer(int? arg)
{
return GetLayer(arg, THIRDPERSON_ONLY_LAYER_NAME, DEFAULT_THIRDPERSON_ONLY_LAYER);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ private async static Task<SkinnedMeshRenderer> CreateHeadlessMeshAsync(SkinnedMe

bool m_done;

async Task<SkinnedMeshRenderer> SetupRendererAsync(GameObject go, Transform FirstPersonBone, RendererFirstPersonFlags x, IAwaitCaller awaitCaller = null)
async Task<SkinnedMeshRenderer> SetupRendererAsync(GameObject go, Transform FirstPersonBone, RendererFirstPersonFlags x,
(int FirstPersonOnly, int ThirdPersonOnly) layer, IAwaitCaller awaitCaller = null)
{
switch (x.FirstPersonFlag)
{
Expand All @@ -72,12 +73,12 @@ async Task<SkinnedMeshRenderer> SetupRendererAsync(GameObject go, Transform Firs
if (eraseBones.Any())
{
// オリジナルのモデルを3人称用にする
smr.gameObject.layer = Vrm10FirstPersonLayerSettings.THIRDPERSON_ONLY_LAYER;
smr.gameObject.layer = layer.ThirdPersonOnly;

// 頭を取り除いた複製モデルを作成し、1人称用にする
var headless = await CreateHeadlessMeshAsync(smr, eraseBones, awaitCaller);
headless.enabled = false;
headless.gameObject.layer = Vrm10FirstPersonLayerSettings.FIRSTPERSON_ONLY_LAYER;
headless.gameObject.layer = layer.FirstPersonOnly;
headless.transform.SetParent(smr.transform, false);
return headless;
}
Expand All @@ -91,7 +92,7 @@ async Task<SkinnedMeshRenderer> SetupRendererAsync(GameObject go, Transform Firs
if (mr.transform.Ancestors().Any(y => y == FirstPersonBone))
{
// 頭の子孫なので1人称では非表示に
mr.gameObject.layer = Vrm10FirstPersonLayerSettings.THIRDPERSON_ONLY_LAYER;
mr.gameObject.layer = layer.ThirdPersonOnly;
}
else
{
Expand All @@ -107,12 +108,12 @@ async Task<SkinnedMeshRenderer> SetupRendererAsync(GameObject go, Transform Firs

case UniGLTF.Extensions.VRMC_vrm.FirstPersonType.firstPersonOnly:
// 1人称のカメラでだけ描画されるようにする
x.GetRenderer(go.transform).gameObject.layer = Vrm10FirstPersonLayerSettings.FIRSTPERSON_ONLY_LAYER;
x.GetRenderer(go.transform).gameObject.layer = layer.FirstPersonOnly;
break;

case UniGLTF.Extensions.VRMC_vrm.FirstPersonType.thirdPersonOnly:
// 3人称のカメラでだけ描画されるようにする
x.GetRenderer(go.transform).gameObject.layer = Vrm10FirstPersonLayerSettings.THIRDPERSON_ONLY_LAYER;
x.GetRenderer(go.transform).gameObject.layer = layer.ThirdPersonOnly;
break;

case UniGLTF.Extensions.VRMC_vrm.FirstPersonType.both:
Expand Down Expand Up @@ -143,7 +144,9 @@ public async Task<List<SkinnedMeshRenderer>> SetupAsync(GameObject go, int? firs
awaitCaller = new ImmediateCaller();
}

Vrm10FirstPersonLayerSettings.SetupLayers(firstPersonOnlyLayer, thirdPersonOnlyLayer);
var layer = (
Vrm10FirstPersonLayerSettings.GetFirstPersonOnlyLayer(firstPersonOnlyLayer),
Vrm10FirstPersonLayerSettings.GetThirdPersonOnlyLayer(thirdPersonOnlyLayer));

var created = new List<SkinnedMeshRenderer>();
if (m_done)
Expand All @@ -155,7 +158,7 @@ public async Task<List<SkinnedMeshRenderer>> SetupAsync(GameObject go, int? firs
var FirstPersonBone = go.GetComponent<Animator>().GetBoneTransform(HumanBodyBones.Head);
foreach (var x in Renderers)
{
var renderer = await SetupRendererAsync(go, FirstPersonBone, x, awaitCaller);
var renderer = await SetupRendererAsync(go, FirstPersonBone, x, layer, awaitCaller);
if (renderer)
{
created.Add(renderer);
Expand Down

0 comments on commit 715006a

Please sign in to comment.