First step to supporting GLTF
This commit is contained in:
parent
f611a0755c
commit
c4c01bedae
@ -2,6 +2,9 @@
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Networking;
|
using UnityEngine.Networking;
|
||||||
|
#if GLTF
|
||||||
|
using GLTFast;
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace RoboidControl.Unity {
|
namespace RoboidControl.Unity {
|
||||||
|
|
||||||
@ -118,7 +121,8 @@ namespace RoboidControl.Unity {
|
|||||||
string extension = core.modelUrl[core.modelUrl.LastIndexOf(".")..];
|
string extension = core.modelUrl[core.modelUrl.LastIndexOf(".")..];
|
||||||
if (extension == ".jpg" || extension == ".png")
|
if (extension == ".jpg" || extension == ".png")
|
||||||
StartCoroutine(LoadJPG());
|
StartCoroutine(LoadJPG());
|
||||||
|
else if (extension == ".gltf" || extension == ".glb")
|
||||||
|
ProcessGltfModel(core);
|
||||||
break;
|
break;
|
||||||
case PoseMsg.Id:
|
case PoseMsg.Id:
|
||||||
Debug.Log($"{this.core.id} Handle Pose");
|
Debug.Log($"{this.core.id} Handle Pose");
|
||||||
@ -162,6 +166,88 @@ namespace RoboidControl.Unity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool loadingModel = false;
|
||||||
|
private async void ProcessGltfModel(RoboidControl.Thing coreThing) {
|
||||||
|
#if GLTF
|
||||||
|
if (!loadingModel) {
|
||||||
|
loadingModel = true;
|
||||||
|
|
||||||
|
Debug.Log("Loading GLTF model from :" + coreThing.modelUrl);
|
||||||
|
GltfImport gltfImport = new GltfImport();
|
||||||
|
bool success = await gltfImport.Load(coreThing.modelUrl);
|
||||||
|
if (success) {
|
||||||
|
Transform parentTransform = this.transform;
|
||||||
|
|
||||||
|
Thing[] things = FindObjectsOfType<Thing>();
|
||||||
|
Thing parentThing = null;
|
||||||
|
foreach (Thing thing in things) {
|
||||||
|
if (thing.core.id == coreThing.id) {
|
||||||
|
parentTransform = thing.transform;
|
||||||
|
parentThing = thing;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await gltfImport.InstantiateMainSceneAsync(parentTransform);
|
||||||
|
SkinnedMeshRenderer[] meshRenderers = parentTransform.GetComponentsInChildren<SkinnedMeshRenderer>();
|
||||||
|
|
||||||
|
#if pHUMANOID4
|
||||||
|
if (parentThing.objectType == 7) {
|
||||||
|
HumanoidControl hc = parentThing.gameObject.GetComponent<HumanoidControl>();
|
||||||
|
if (hc == null)
|
||||||
|
hc = parentThing.gameObject.AddComponent<HumanoidControl>();
|
||||||
|
|
||||||
|
foreach (SkinnedMeshRenderer meshRenderer in meshRenderers) {
|
||||||
|
if (meshRenderer.rootBone != null) {
|
||||||
|
Debug.Log("Found a skinned mesh with bones");
|
||||||
|
hc.RetrieveBonesFrom(meshRenderer.rootBone);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
parentTransform.localScale = Vector3.one;
|
||||||
|
if (meshRenderers.Length > 0) {
|
||||||
|
foreach (SkinnedMeshRenderer meshRenderer in meshRenderers) {
|
||||||
|
if (meshRenderer.rootBone != null) {
|
||||||
|
Debug.Log("Found a skinned mesh with bones");
|
||||||
|
ScanForThings(meshRenderer.rootBone);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ScanForThings(parentTransform);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.transform.localScale = Vector3.one * 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
loadingModel = true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ScanForThings(Transform rootTransform) {
|
||||||
|
// Thing[] thingArray = allThings.ToArray();
|
||||||
|
|
||||||
|
// for (int thingIx = 0; thingIx < thingArray.Length; thingIx++) {
|
||||||
|
// Thing thing = thingArray[thingIx];
|
||||||
|
// GameObject foundObj = FindThingByName(thing, rootTransform);
|
||||||
|
// if (foundObj != null && foundObj != thing.gameObject) {
|
||||||
|
// Thing foundThing = foundObj.GetComponent<Thing>();
|
||||||
|
// if (foundThing == null) {
|
||||||
|
// allThings.Remove(thing);
|
||||||
|
|
||||||
|
// foundThing = foundObj.AddComponent<Thing>();
|
||||||
|
// foundThing.networkId = thing.networkId;
|
||||||
|
// foundThing.objectId = thing.objectId;
|
||||||
|
// allThings.Add(foundThing);
|
||||||
|
// Destroy(thing.gameObject);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handle a Pose event
|
/// Handle a Pose event
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user