mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-04-25 07:28:51 -05:00
static 変数の管理はやめて、定数置き場になった
This commit is contained in:
parent
8a17ff9c3f
commit
715006abf9
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user