void setupWorld(XmlElement gameobject) { worldmgr = new WorldManager(); worldmgr.parentScene = this; worldmgr.name = gameobject.GetAttribute("wname"); foreach (XmlElement child in gameobject.ChildNodes) { if (child.GetAttribute("name") == "Terrain") { worldmgr.terrainName = child.SelectSingleNode("name").InnerText; string[] ssize = child.SelectSingleNode("size").InnerText.Split(new char[] { ' ' }); worldmgr.size.x = float.Parse(ssize[0]); worldmgr.size.y = float.Parse(ssize[1]); worldmgr.size.z = float.Parse(ssize[2]); worldmgr.chunkSplit = int.Parse(child.SelectSingleNode("splitSize").InnerText); worldmgr.chunkSize = worldmgr.size.x / worldmgr.chunkSplit; Common.DEBUG_MSG("name:" + worldmgr.name + ", worldsize:" + worldmgr.size + ", splitChunks:" + worldmgr.chunkSplit + ", chunkSize:" + (worldmgr.size.x / worldmgr.chunkSplit)); foreach (XmlElement tchild in child.SelectSingleNode("splatprotos").ChildNodes) { KeyValuePair <string, string> p = new KeyValuePair <string, string>(tchild.GetAttribute("texture"), tchild.GetAttribute("normalMap")); worldmgr.load_splatPrototypes.Add(p); KeyValuePair <Vector2, Vector2> p1 = new KeyValuePair <Vector2, Vector2>( new Vector2( float.Parse(tchild.GetAttribute("tileSizeX")), float.Parse(tchild.GetAttribute("tileSizeY"))), new Vector2( float.Parse(tchild.GetAttribute("tileOffsetX")), float.Parse(tchild.GetAttribute("tileOffsetY"))) ); worldmgr.splatPrototypes_titlesizeoffset.Add(p1); Common.DEBUG_MSG("set load splatPrototype:" + tchild.GetAttribute("texture")); } foreach (XmlElement tchild in child.SelectSingleNode("treePrototypes").ChildNodes) { worldmgr.load_treePrototypes.Add(tchild.GetAttribute("prefab")); Common.DEBUG_MSG("set load treePrototype:" + tchild.GetAttribute("prefab")); } foreach (XmlElement tchild in child.SelectSingleNode("detailPrototypes").ChildNodes) { worldmgr.load_detailPrototypes.Add(tchild.GetAttribute("prefab")); Common.DEBUG_MSG("set load detailPrototype:" + tchild.GetAttribute("prefab")); } worldmgr.createWorldObjs(); } else { WorldSceneObject obj = new WorldSceneObject(); Asset newasset = findAsset(child.GetAttribute("asset"), true, child.GetAttribute("layer")); Vector3 pos = Vector3.zero; Vector3 rot = Vector3.zero; Vector3 sca = Vector3.zero; XmlNode gameobjectpos = child.SelectSingleNode("transform").SelectSingleNode("position"); XmlNode gameobjectrot = child.SelectSingleNode("transform").SelectSingleNode("rotation"); XmlNode gameobjectsca = child.SelectSingleNode("transform").SelectSingleNode("scale"); pos.x = float.Parse(gameobjectpos.SelectSingleNode("x").InnerText); pos.y = float.Parse(gameobjectpos.SelectSingleNode("y").InnerText); pos.z = float.Parse(gameobjectpos.SelectSingleNode("z").InnerText); rot.x = float.Parse(gameobjectrot.SelectSingleNode("x").InnerText); rot.y = float.Parse(gameobjectrot.SelectSingleNode("y").InnerText); rot.z = float.Parse(gameobjectrot.SelectSingleNode("z").InnerText); sca.x = float.Parse(gameobjectsca.SelectSingleNode("x").InnerText); sca.y = float.Parse(gameobjectsca.SelectSingleNode("y").InnerText); sca.z = float.Parse(gameobjectsca.SelectSingleNode("z").InnerText); obj.name = child.GetAttribute("name"); obj.position = pos; obj.eulerAngles = rot; obj.scale = sca; obj.idkey = child.GetAttribute("id"); obj.asset = newasset; newasset.loading = false; newasset.type = Asset.TYPE.WORLD_OBJ; newasset.loadLevel = Asset.LOAD_LEVEL.LEVEL_SCRIPT_DYNAMIC; // newasset.refs.Add(obj.idkey); WorldManager.ChunkPos chunkpos = WorldManager.calcAtChunk(pos.x, pos.z, worldmgr.chunkSplit, worldmgr.chunkSize); worldmgr.worldObjs[chunkpos.x, chunkpos.y, 0].Add(obj); } } worldmgr.load(); }
void Update() { if (Camera.main == null) { Common.DEBUG_MSG("RPG_Controller::Update: not ready!"); return; } if (characterController == null) { Common.DEBUG_MSG("Error: No Character Controller component found! Please add one to the GameObject which has this script attached."); return; } if (WorldManager.currinst != null) { WorldManager.ChunkPos currChunk = WorldManager.currinst.atChunk(); if (currChunk.x >= 0 && currChunk.y >= 0) { if (WorldManager.currinst.loadedChunk(currChunk) == false) { canControl = 0; showAlert(true); Common.DEBUG_MSG("RPG_Controller::Update: wait for load(" + (currChunk.x + 1) + "," + (currChunk.y + 1) + "), currpos=" + transform.position); return; } if (WorldManager.currinst.loadedWorldObjsCamera() == false) { canControl = 0; showAlert(true); Common.DEBUG_MSG("RPG_Controller::Update: wait for load(worldObject)!"); return; } if (canControl < 5) { canControl += 1; return; } if (enabled == false) { // Common.DEBUG_MSG("RPG_Controller::Update: enabled = false!"); if (isShowAlert == true) { showAlert(false); } return; } KBEngine.Entity player = KBEngineApp.app.player(); if (player == null) { return; } walkSpeed = ((KBEngine.Avatar)player).moveSpeed / 10f; // 每秒速度 } } GetInput(); StartMotor(); if (isShowAlert == true) { showAlert(false); } }