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; }
/// <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(); } }
// 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(); }
/// <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>(); } }
// 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>(); } }
/// <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; } }
// 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(); }
/// <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); }
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; }