private void Start() { if (!IsController) { return; } //还原存档数据 if (DataCenter.Get("scene") == SceneManager.GetActiveScene().name) { if (GameConfig.Loaded) { return; } GameConfig.RecoverSceneFromString(DataCenter.Get("scenecode")); Direction = int.Parse(DataCenter.Get("mapdirection", "0")); Transform pp = GameObject.Find("Player").transform; pp.position = new Vector3(int.Parse(DataCenter.Get("mapx", "0")), pp.position.y, int.Parse(DataCenter.Get("mapz", "0"))); s.sprite = walker[1 + 3 * Direction]; CircleCanvas.SetActive(false); } if (IsController) { GameConfig.Followers.Clear(); GameObject Player = GameObject.Find("Player"); GameConfig.PlayerState ps = new GameConfig.PlayerState(); ps.FPS = 1; ps.pos = Player.transform.position; for (int i = 0; i < 1000; i++) { GameConfig.StateFlow[i] = ps; } int index = 1; foreach (TeamController.Member m in TeamController.Team.Mem) { if (m.Name != "世原·安诺") { GameObject fab = (GameObject)Resources.Load("Prefabs\\Follower"); GameObject box = Instantiate(fab, new Vector3(0, 0, 0), Quaternion.identity); FollowerController fc = box.GetComponent <FollowerController>(); fc.character = m.Name; fc.DelayStep = 20 * index; fc.Confirm(); index++; box.SetActive(true); } } } //无论如何是否在目标地图,一旦已经加载地图,存档就不应该被二次还原 GameConfig.Loaded = true; }
void FixedUpdate() { Vector3 te = transform.position; if (GameConfig.Controller == null) { return; } Vector3 r = GameConfig.Controller.transform.position; Vector3 ro = transform.localEulerAngles; if (te.x != r.x || te.z != r.z) { transform.position = new Vector3(te.x + (r.x - te.x) / 10, te.y + (((r.y + 1.5f + (GameConfig.IsMsgProcess ? -1.5f : 0f)) - te.y) / 15), te.z + ((r.z - (GameConfig.IsMsgProcess ? 5f : 7f)) - te.z) / 15); if (transform.position.x < minx) { transform.position = new Vector3(minx, transform.position.y, transform.position.z); } if (transform.position.z < minz) { transform.position = new Vector3(transform.position.x, transform.position.y, minz); } if (transform.position.x > maxx) { transform.position = new Vector3(maxx, transform.position.y, transform.position.z); } if (transform.position.z > maxz) { transform.position = new Vector3(transform.position.x, transform.position.y, maxz); } /**transform.position = new Vector3(r.x,(r.y + 5f), * te.z + ((r.z - (GameConfig.IsMsgProcess ? 5f : 7f)) - te.z) / 15);**/ transform.localEulerAngles = new Vector3(ro.x + (10 - ro.x) / 25, ro.y + (0 - ro.y) / 25, ro.z); } //塞入玩家状态流 if (GameConfig.StateFlow[GameConfig.StatePos].pos != Player.transform.position) { GameConfig.StatePos++; if (GameConfig.StatePos >= 1000) { GameConfig.StatePos = 0; } GameConfig.PlayerState ps = new GameConfig.PlayerState(); ps.FPS = Player.GetComponent <RPGEvent>().realfps; ps.pos = Player.transform.position; GameConfig.StateFlow[GameConfig.StatePos] = ps; } return; //障碍物隐藏 RaycastHit[] hit; Renderer ren; hit = Physics.RaycastAll(Player.transform.position, transform.position); if (hit.Length > 0) { foreach (RaycastHit ra in hit) { if (!IsInWhiteList(ra.collider.gameObject)) { ren = ra.collider.gameObject.GetComponent <Renderer>(); if (ren != null) { HiddenObj.Add(ren); SetMaterialsAlpha(ren, 0.5f); } } } } else { foreach (Renderer re in HiddenObj) { SetMaterialsAlpha(re, 1f); } HiddenObj.Clear(); } }