Beispiel #1
0
    public void MovedPlayer(Vector3 currentPlayerPosOnMap, Vector3 moveVec)
    {
        //二次配列上のプレイヤーが移動する予定地
        Vector3 nextPositionOnMap = currentPlayerPosOnMap + moveVec;

        bool changedSprite = false;

        //二次配列上で、次に書き換える予定の名前
        MapDate.eGroundName nextGroundName;

        Vector3 beforePlayerPos = movedPlayerPosList[movedPlayerPosList.Count - 1];

        //移動予定地が前回移動した地点だった場合
        if (nextPositionOnMap == beforePlayerPos)
        {
            movedPlayerPosList.RemoveAt(movedPlayerPosList.Count - 1);
            //前回移動した地点だったが、白い床だった場合余計な関数を呼ばないようにする
            if (mapDate.mapNumberDate[(int)currentPlayerPosOnMap.y, (int)currentPlayerPosOnMap.x] == (int)MapDate.eGroundName.eWhite)
            {
                return;
            }
            changedSprite  = true;
            nextGroundName = MapDate.eGroundName.eDefaultPannel;
            mapDate.mapNumberDate[(int)currentPlayerPosOnMap.y, (int)currentPlayerPosOnMap.x] = (int)nextGroundName;
            mapDate.mapObjectDate[(int)currentPlayerPosOnMap.y, (int)currentPlayerPosOnMap.x].GetComponent <ChangedSprite>().ChangeSprite(changedSprite);
            //spriteがもとに戻るので、そこにあった足跡も消す
            footPrinter.DeleteOneFoot();
            Vector3 ppp = nextPositionOnMap;
            effectSpawner2.SetEffect(ppp);
            audioSource.PlayOneShot(changeClip);
        }
        //移動予定地が変化前だった場合
        else if (mapDate.mapNumberDate[(int)nextPositionOnMap.y, (int)nextPositionOnMap.x] == (int)MapDate.eGroundName.eDefaultPannel)
        {
            changedSprite  = false;
            nextGroundName = MapDate.eGroundName.eChangedPannel;
            mapDate.mapNumberDate[(int)nextPositionOnMap.y, (int)nextPositionOnMap.x] = (int)nextGroundName;
            mapDate.mapObjectDate[(int)nextPositionOnMap.y, (int)nextPositionOnMap.x].GetComponent <ChangedSprite>().ChangeSprite(changedSprite);
            movedPlayerPosList.Add(currentPlayerPosOnMap);
            //spriteを変化させたので、そこに足跡を生成させる
            Vector3 footPos       = nextPositionOnMap;
            Vector3 footDirection = currentPlayerPosOnMap - nextPositionOnMap;
            //footQua = Quaternion.Euler(nextPositionOnMap-currentPlayerPosOnMap);
            footPrinter.SetFoot(footPos, footDirection);
            effectSpawner.SetEffect(footPos);
            audioSource.PlayOneShot(deleteClip);
        }
        else if (mapDate.mapNumberDate[(int)nextPositionOnMap.y, (int)nextPositionOnMap.x] == (int)MapDate.eGroundName.eWhite)
        {
            movedPlayerPosList.Add(currentPlayerPosOnMap);
        }
        else
        {
            return;
        }
    }