static 変数の管理はやめて、定数置き場になった

This commit is contained in:
ousttrue 2021-09-09 21:14:31 +09:00
parent 8a17ff9c3f
commit 715006abf9
2 changed files with 17 additions and 31 deletions

View File

@ -6,15 +6,9 @@ namespace UniVRM10
{
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)
{
@ -30,25 +24,14 @@ namespace UniVRM10
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);
}
}
}

View File

@ -60,7 +60,8 @@ namespace UniVRM10
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)
{
@ -72,12 +73,12 @@ namespace UniVRM10
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;
}
@ -91,7 +92,7 @@ namespace UniVRM10
if (mr.transform.Ancestors().Any(y => y == FirstPersonBone))
{
// 頭の子孫なので1人称では非表示に
mr.gameObject.layer = Vrm10FirstPersonLayerSettings.THIRDPERSON_ONLY_LAYER;
mr.gameObject.layer = layer.ThirdPersonOnly;
}
else
{
@ -107,12 +108,12 @@ namespace UniVRM10
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:
@ -143,7 +144,9 @@ namespace UniVRM10
awaitCaller = new ImmediateCaller();
}
Vrm10FirstPersonLayerSettings.SetupLayers(firstPersonOnlyLayer, thirdPersonOnlyLayer);
var layer = (
Vrm10FirstPersonLayerSettings.GetFirstPersonOnlyLayer(firstPersonOnlyLayer),
Vrm10FirstPersonLayerSettings.GetThirdPersonOnlyLayer(thirdPersonOnlyLayer));
var created = new List<SkinnedMeshRenderer>();
if (m_done)
@ -155,7 +158,7 @@ namespace UniVRM10
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);