public bool UpcastInSceneThreeObject3D(Object3DElem child) { bool isSimpleGroup = (child.Parent.Type == "Group") && (child.Parent.ChildCount == 1); if (isSimpleGroup) { var parent = child.Parent; var grandparent = parent.Parent; parent.RemoveChild(child); child.CopyAttributes(parent); grandparent.ReplaceChild(parent, child); } return(isSimpleGroup); }
void WriteCommonAFrameNode(Object3DElem el, AFrameNode node) { // http://math.stackexchange.com/questions/237369/given-this-transformation-matrix-how-do-i-decompose-it-into-translation-rotati var m = el.Matrix; var pos = Vector3Property.MakePosition(new Vector3(m[12], m[13], m[14])); node.AddAttribute("position", pos); var sx = new Vector3(m[0], m[1], m[2]).magnitude; var sy = new Vector3(m[4], m[5], m[6]).magnitude; var sz = new Vector3(m[8], m[9], m[10]).magnitude; var scale = Vector3Property.MakeScale(new Vector3(sx, sy, sz)); node.AddAttribute("scale", scale); var forward = el.UnityMatrix.MultiplyVector(Vector3.forward); var upward = el.UnityMatrix.MultiplyVector(Vector3.up); var q = Quaternion.LookRotation(forward, upward); var rot = Vector3Property.MakeRotation(q); node.AddAttribute("rotation", rot); node.AddAttribute("id", el.Name); if (el.HasTag) { node.AddAttribute("tag", el.Tag); } if (el.HasLayer) { node.AddAttribute("layer", el.Layer); } var visitor = new AFrameExportVisitor(sharedNodeTable); foreach (var child in el.Children) { child.Accept(visitor); node.AddChild(visitor.Node); } }
void RegisterScriptVariables(UnitySceneRoot unityscene, Object3DElem obj, ScriptNode script) { foreach (var v in script.VariableEnumerable) { var val = v; Texture tex = val.GetTexture(); if (tex) { var elem = root.SharedNodeTable.Get <TextureElem>(tex.GetInstanceID().ToString()); val.value = elem.Uuid; } Material mtl = val.GetMaterial(); if (mtl) { var elem = root.SharedNodeTable.Get <MaterialElem>(mtl.GetInstanceID().ToString()); val.value = elem.Uuid; } Transform tr = val.GetTransform(); if (tr) { var elem = objNodeTable[tr.gameObject.GetInstanceID().ToString()]; val.value = elem.Uuid; } GameObject go = val.GetGameObject(); if (go) { var elem = objNodeTable[go.GetInstanceID().ToString()]; val.value = elem.Uuid; } obj.AddScriptVariable(script.BehaviourName, val); } }
Object3DElem VisitGameObjectNode_r(IGameObjectNode n) { Debug.Assert(n != null); Object3DElem elem = null; if (n.SuperRoot) { elem = new SceneElem(); elem.Name = "KanauScene"; elem.Uuid = n.Guid; } else { elem = new GroupElem(n); elem.Uuid = n.Guid; } if (n.HasTag) { elem.Tag = n.Tag; } if (n.HasLayer) { elem.Layer = n.Layer; } elem.IsStatic = n.IsStatic; objNodeTable[n.InstanceId] = elem; foreach (var child in n.Children) { var childelem = VisitGameObjectNode_r(child); elem.AddChild(childelem); } return(elem); }
Object3DElem VisitGameObjectNode_r(IGameObjectNode n) { Debug.Assert(n != null); Object3DElem elem = null; if (n.SuperRoot) { elem = new SceneElem(); elem.Name = "KanauScene"; } else { elem = new GroupElem(n); } objNodeTable[n.InstanceId] = elem; foreach (var child in n.Children) { var childelem = VisitGameObjectNode_r(child); elem.AddChild(childelem); } return(elem); }