void Start() { PlanarShadows.ShadowingLightDirection = ShadowingLight.transform.forward; PlanarShadows.ShadowColor = ShadowColor; foreach (GameObject[] soldierGOs in _allSoldierGOs) { List <SkinnedMeshRenderer> teamSkinnedMeshRenderers = new List <SkinnedMeshRenderer>(); Bounds localBounds = new Bounds(new Vector3(0.0f, 1f, 0.0f), new Vector3(10, 5f, 8f)); foreach (GameObject soldierGO in soldierGOs) { SkinnedMeshRenderer[] soldierSkinnedMeshRenderers = soldierGO.GetComponentsInChildren <SkinnedMeshRenderer>(); for (int i = 0; i < soldierSkinnedMeshRenderers.Length; ++i) { teamSkinnedMeshRenderers.Add(soldierSkinnedMeshRenderers[i]); } Animation anim = soldierGO.GetComponent <Animation>(); //AnimationState animState = anim["run"]; //animState.time = Random.Range( 0f, animState.length - 0.1f ); anim.CrossFade(_animationNames[Random.Range(0, _animationNames.Length - 1)]); //anim.Play( "run" ); } GameObject teamGO = SkinnedMeshCombiner.Combine(teamSkinnedMeshRenderers, localBounds); PlanarShadows.EnableShadowOnGameObject(teamGO, true); } }
// Token: 0x06001284 RID: 4740 RVA: 0x0006E6A0 File Offset: 0x0006C8A0 private static AvatarDecorator CreateAvatarMesh(AvatarGearParts gear) { SkinnedMeshCombiner.Combine(gear.Base, gear.Parts); gear.Parts.ForEach(delegate(GameObject obj) { UnityEngine.Object.Destroy(obj); }); return(gear.Base.GetComponent <AvatarDecorator>()); }
// Token: 0x06001282 RID: 4738 RVA: 0x0006E5A4 File Offset: 0x0006C7A4 public static AvatarDecoratorConfig InstantiateRagdoll(AvatarGearParts gear, Color skinColor) { SkinnedMeshCombiner.Combine(gear.Base, gear.Parts); LayerUtil.SetLayerRecursively(gear.Base.transform, UberstrikeLayer.Ragdoll); gear.Base.GetComponent <SkinnedMeshRenderer>().updateWhenOffscreen = true; AvatarDecoratorConfig component = gear.Base.GetComponent <AvatarDecoratorConfig>(); component.SetSkinColor(skinColor); return(component); }
// Token: 0x06001502 RID: 5378 RVA: 0x00076CDC File Offset: 0x00074EDC private AvatarDecoratorConfig CreateLutzRavinoff(Loadout gearLoadout) { AvatarDecoratorConfig defaultRagdoll = PrefabManager.Instance.DefaultRagdoll; AvatarDecoratorConfig avatarDecoratorConfig = UnityEngine.Object.Instantiate(defaultRagdoll) as AvatarDecoratorConfig; List <GameObject> list = new List <GameObject>(); SkinnedMeshCombiner.Combine(avatarDecoratorConfig.gameObject, list); foreach (GameObject obj in list) { UnityEngine.Object.Destroy(obj); } return(avatarDecoratorConfig); }
// Token: 0x06001503 RID: 5379 RVA: 0x00076D5C File Offset: 0x00074F5C private AvatarDecoratorConfig CreateHolo(IUnityItem holo) { AvatarDecoratorConfig avatarDecoratorConfig = null; GameObject gameObject = holo.Create(Vector3.zero, Quaternion.identity); HoloGearItem component = gameObject.GetComponent <HoloGearItem>(); if (component && component.Configuration.Ragdoll) { avatarDecoratorConfig = (UnityEngine.Object.Instantiate(component.Configuration.Ragdoll) as AvatarDecoratorConfig); LayerUtil.SetLayerRecursively(avatarDecoratorConfig.transform, UberstrikeLayer.Ragdoll); SkinnedMeshCombiner.Combine(avatarDecoratorConfig.gameObject, new List <GameObject>()); } UnityEngine.Object.Destroy(gameObject); return(avatarDecoratorConfig); }
IEnumerator LoadAvatar() { if (isLoading) { Debug.Log("Now Loading!"); yield break; } // ルートボーン用のファイルを読み込む Debug.Log("rootBoneFileName " + rootBoneFileName); ResourceRequest bornReq = Resources.LoadAsync <GameObject>(rootBoneFileName); // 各パーツのファイルを読み込む for (int i = 0; i < partsNum; i++) { resourceReqs[i] = Resources.LoadAsync <Object>(selectedFileNames[i]); } // ロード待ち while (true) { bool isLoadEnd = true; for (int i = 0; i < partsNum; i++) { if (!resourceReqs[i].isDone) { isLoadEnd = false; } } if (isLoadEnd) { break; } yield return(null); } while (!bornReq.isDone) { yield return(null); } // Resourcesから必要なファイルを読み込み終わったら、空のGameObjectを生成 GameObject root = new GameObject(); root.transform.position = Vector3.zero; root.transform.localScale = Vector3.one; root.name = "Avatar"; // 生成した空のGameObjectにSkinnedMeshCombinerを追加する(以下、Root) SkinnedMeshCombiner smc = root.AddComponent <SkinnedMeshCombiner>(); if (bornReq.asset == null) { Debug.LogError("born asset is null"); } // ルートボーン用のファイルをInstantiateする GameObject rootBone = (GameObject)Instantiate(bornReq.asset as GameObject); if (rootBone != null) { rootBone.transform.parent = root.transform; rootBone.transform.localPosition = Vector3.zero; rootBone.transform.localScale = Vector3.one; rootBone.transform.localRotation = Quaternion.identity; smc.rootBoneObject = rootBone.transform; } else { Debug.LogError("Root Bone Instantiate Error!"); yield break; } // Rootの下に読み込んだファイル一式をInstanTiateする for (int i = 0; i < partsNum; i++) { GameObject obj = (GameObject)Instantiate(resourceReqs[i].asset); if (obj != null) { Debug.Log("[" + i + "] " + obj.name); obj.transform.parent = root.transform; obj.transform.localPosition = Vector3.zero; obj.transform.localScale = Vector3.one; obj.transform.localRotation = Quaternion.identity; // 生成したモデルをRootのSkinnedMeshCombinerの各種プロパティに設定する smc.equipPartsObjectList[i] = obj; } } // レッツ・コンバイン smc.Combine(); // AvatarTest.playerにRootを割り当てる(古いRootは削除する) if (player != null) { GameObject.DestroyImmediate(player); player = null; } player = root; }