Пример #1
0
    public void RotationPotStart(Vector3 lotAngle, Vector3 Weve, Vector3 pot, float goAngle = 0, bool SetAngle = false)
    {
        IsFallBox = false;
        character.GetComponent <PlayerType2>().IsDontShield        = true;
        character.GetComponent <PlayerType2>().IsDontCharacterMove = true;

        PlayState.playState.gameMode          = PlayState.GameMode.RotationPot;
        PlayState.playState.RotationPotTime   = 5;
        PlayState.playState.RotationPotTimech = false;
        Camera.main.gameObject.GetComponent <CameraPos>().RainPotChange(goAngle, SetAngle);
        PayerPos   = character.gameObject.transform.localPosition;
        afterAngle = lotAngle + stageObj.transform.eulerAngles;
        startAngle = stageObj.transform.eulerAngles;
        waterHi    = WaterObj.GetComponent <WaterHi>();

        WaveObj.SetActive(true);
        WaveObj.transform.localScale              = StageMake.LoadStageData.stageSize - new Vector3(0.02f, 0.01f, 0.02f);
        WaveObj.transform.localPosition           = Vector3.zero;
        WaveObj.transform.localEulerAngles        = -lotAngle;
        WaveObj.GetComponent <BoxMake>().sethi    = waterHi.max / StageMake.LoadStageData.stageSize.x;
        WaveObj.GetComponent <BoxMake>().moveTime = 0;
        WaveObj.GetComponent <BoxMake>().lat      = 0;
        WaveObj.GetComponent <BoxMake>().BoxCheck = false;
        WaveObj.transform.eulerAngles             = Weve;

        saveLot       += Weve;
        playerStartPos = pot;
        WaveObj.GetComponent <BoxMake>().planeUpdate();

        rotSet = true;
    }
Пример #2
0
    /// <summary>
    /// エネミーの情報を取得する
    /// </summary>
    /// <param name="water">ステージの水位情報</param>
    private void GetEnemyInfo(WaterHi water)
    {
        enemy = FindObjectOfType <EnemyMaster>();

        // 敵情報の取得に成功した場合 (敵が配置されているステージで正常に取得出来たときのみ)
        if (enemy != null)
        {
            // ステージの中心座標を取得
            Vector3 stageCenter;
            if (LoadStageData != null)
            {
                stageCenter = LoadStageData.stageSize * 0.5f;
            }
            else
            {
                stageCenter = Vector3.zero;
            }

            enemy.StageCenter = stageCenter;

            // 敵のスポーン処理を開始
            enemy.StageWater = water;
            enemy.Init();
        }
    }
Пример #3
0
    // Start is called before the first frame update
    void Start()
    {
        Ray        ray = new Ray(transform.position, transform.TransformDirection(Vector3.down));
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, 200, layerMask))
        {
            waterHi = hit.collider.gameObject.GetComponent <WaterHi>();
        }

        SetMaxPos();
    }
Пример #4
0
    /// <summary>
    /// 初期化
    /// </summary>
    private void RubbleInit()
    {
        // 開始座標の設定
        startPosition = transform.position;

        // 水オブジェクトの取得
        Ray        ray = new Ray(startPosition, Vector3.down);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, 200f, layerMask))
        {
            stageWater = hit.transform.GetComponent <WaterHi>();
        }
    }
Пример #5
0
    // Start is called before the first frame update
    void Start()
    {
        //materials= new Material(shaders);
        //meshRenderer.material = materials;

        look          = GetComponent <LookForCamera>();
        look.RainFall = true;
        cameraPos     = Camera.main.gameObject.GetComponent <CameraPos>();
        Ray        ray = new Ray(transform.position, transform.TransformDirection(Vector3.down));
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, 200, layerMask))
        {
            waterHi = hit.collider.gameObject.GetComponent <WaterHi>();
        }
    }
Пример #6
0
    /// <summary>
    /// 敵の初期化
    /// </summary>
    private void EnemyInit()
    {
        step          = 0;
        location      = 0;
        standby       = false;
        finishOneLoop = false;

        connectPlayState = GetPlayState();

        // コライダーの設定
        enemy.radius = colliderSize;
        enemy.center = new Vector3(0, colliderSize, 0);

        Ray        ray = new Ray(new Vector3(transform.position.x, transform.position.y + enemy.center.y, transform.position.z), Vector3.down);
        RaycastHit hit;

        // 水面の取得
        if (stageWater == null)
        {
            if (Physics.Raycast(ray, out hit, 200, waterLayer))
            {
                stageWater = hit.transform.gameObject.GetComponent <WaterHi>();
            }
        }

        // アニメーションの速度を取得
        if (enemyAnime != null)
        {
            animationSpeed = enemyAnime.GetCurrentAnimatorStateInfo(0).speed;
        }

        // 床の位置を取得
        if (Physics.Raycast(ray, out hit, 200, groundLayer))
        {
            // 敵の開始時の位置を設定
            transform.position = new Vector3(transform.position.x, hit.point.y, transform.position.z);
            // 敵の開始時のサイズを設定
            transform.localScale = Vector3.one * enemySize;
            // 行動計画を設定
            SetMoveSchedule(movePlan);
            // 処理実行
            standby = true;
        }
    }
Пример #7
0
    // Start is called before the first frame update
    void Start()
    {
        // コンポーネント取得
        rb          = GetComponent <Rigidbody>();
        boxCollider = GetComponent <BoxCollider>();
        try
        {
            waterHi = Progress.progress.waterHi;
        }
        catch
        {
            Ray        ray = new Ray(transform.position, transform.TransformDirection(Vector3.down));
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 200, layerMask))
            {
                waterHi = hit.collider.gameObject.GetComponent <WaterHi>();
            }
        }

        SetMaxPos();
    }
Пример #8
0
    /// <summary>
    /// プレイヤーをスポーンさせる(ステージの読み込みが完了した後に実行)
    /// </summary>
    /// <param name="spawnPosition">スポーン座標</param>
    /// <param name="water">ステージの水位情報</param>
    /// <param name="oxygen">酸素ゲージスクリプト</param>
    /// <param name="loadStage">読み込むステージの情報</param>
    /// <param name="startRotation">スポーン時の向き</param>
    public void SpawnPlayer(Vector3 spawnPosition, WaterHi water, O2Controller oxygen, StageData loadStage, Vector3?startRotation = null)
    {
        // 酸素ゲージを取得
        OxygenGauge = oxygen;

        // ステージデータを取得
        LoadStageData = loadStage;

        // プレイヤーをスポーン
        Player = Instantiate(playerPrefab, spawnPosition, Quaternion.identity, transform);

        // プレイヤーの向きを設定
        Vector3 rot = startRotation ?? Vector3.zero;

        Player.transform.localRotation = Quaternion.Euler(rot);

        // プレイヤーに水位情報を渡す
        Player.StageWater = water;

        // 敵情報を取得
        GetEnemyInfo(water);
    }
Пример #9
0
    private void Update()
    {
        try
        {
            gameMode = PlayState.playState.gameMode;
        }
        catch
        {
            gameMode = PlayState.GameMode.Play;
        }

        if (waterHi != null)
        {
            // 足場が移動できる範囲を取得
            Ray        ray = new Ray(transform.position, Vector3.down);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 200f, groundLayerMask))
            {
                minPosition = hit.point + Vector3.up * boxCollider.size.y * 0.5f;
            }
            else
            {
                minPosition = new Vector3(transform.position.x, boxCollider.size.y * 0.5f, transform.position.z);
            }

            waterPosition = new Vector3(transform.position.x, waterHi.max - (boxCollider.size.y * 0.5f - 0.06f), transform.position.z);

            ray = new Ray(transform.position, Vector3.up);
            if (Physics.Raycast(ray, out hit, 200f, groundLayerMask))
            {
                maxPosition = hit.point + Vector3.down * boxCollider.size.y * 0.5f;
            }
            else
            {
                maxPosition = new Vector3(transform.position.x, StageMake.LoadStageData.stageSize.y + boxCollider.size.y * 0.5f, transform.position.z);
            }

            isLock = gameMode == PlayState.GameMode.RotationPot;
            isFall = PlayState.playState.IsFallBox && isLock;


            if (isFall)
            {
                Vector3 target = minPosition.y > waterPosition.y ? minPosition : waterPosition;
                if (Vector3.Distance(transform.position, target) > 0.1f)
                {
                    if (gameMode != PlayState.GameMode.Pause)
                    {
                        transform.position = Vector3.MoveTowards(transform.position, target, 5.0f * Time.deltaTime);
                    }
                }
                else
                {
                    isFall             = false;
                    transform.position = target;
                }
            }
            else
            {
                if (isLock == false)
                {
                    if (minPosition.y + (boxCollider.size.y * 0.5f - 0.06f) > waterHi.max)
                    {
                        transform.position = minPosition;
                    }
                    else if (maxPosition.y + (boxCollider.size.y * 0.5f - 0.06f) < waterHi.max)
                    {
                        transform.position = maxPosition;
                    }
                    else
                    {
                        transform.position = new Vector3(transform.position.x, waterHi.max - (boxCollider.size.y * 0.5f - 0.06f), transform.position.z);
                    }
                }
            }
        }
        else
        {
            try
            {
                waterHi = Progress.progress.waterHi;
            }catch
            {
            }
        }

        isInWater = waterHi != null && transform.position.y < waterHi.max;
    }