예제 #1
0
 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;
 }
예제 #2
0
    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();
        }
    }