習作開発進める:スイッチを押す動作、アイテムを明滅、ゴールの時の演出アップデート【186日目】(2019/02/01)
https://gyazo.com/ea99d1d1e6a5450d085db2d8a4eeda2e
Porin.icon今日はカラメルカラムの業務の作業記録だよん!
◆作業記録の目次
1. 振り返りと考え事たいむ
2. 習作開発進める:スイッチを押す動作、アイテムを明滅、ゴールの時の演出アップデート
◆作業時間のタイムトラッキング結果
習作の相談してるときのは時間録り忘れた
https://gyazo.com/c4a81d38089ab0587fe0c74fab5d239f
https://gyazo.com/7eba34db6f37437d215b8146b969b35c
https://gyazo.com/ea38e8d40023a4d62a667463b859b1d4
1. 振り返りと考え事たいむ
◆前日の振り返り
▼ 前回の業務の作業記録
▼ 振り返り内容
先日休んじゃったので無し
◆本日やりたいこと
習作仕上げ
/icons/done.iconBGMの修正
/icons/done.iconデザインを差し替え
/icons/done.iconスイッチ押す部分
/icons/done.iconゴール
https://gyazo.com/ea38e8d40023a4d62a667463b859b1d4
2. 習作開発進める:スイッチを押す動作、アイテムを明滅、ゴールの時の演出アップデート
◆ BGMを止める部分をつくる
エンディング
スイッチ押す時(ステージ移動のときはつける)
敵に見つかった時
◆ スイッチを押す動作
今までは上に乗るようにしていたけど、デザイナーさんが押すイラストを作ってくれたぽいのでちょい動きを変更
スイッチに到達→スイッチ上部までゆっくり移動→プレイヤーが押す→プレイヤーが戻る
コードは今までの使い回しなので割愛
ちょっと動きがずれてるのは調整しよう...
https://gyazo.com/7738ff982efdca5fac4ac7e9690892ae
◆ アイテムを明滅
code:ItemController.cs
using UnityEngine;
public class ItemController : MonoBehaviour {
float opacity;
public float blinkSpeed;
public float blinkOffset;
public float minOpacity;
SpriteRenderer itemRenderer;
Color originColor;
StageDirector stageDirector;
void Start () {
stageDirector = FindObjectOfType<StageDirector>();
itemRenderer = GetComponent<SpriteRenderer>();
originColor = itemRenderer.color;
}
void Update () {
if(stageDirector.stageState == StageDirector.STAGESTATE.INSTAGE)
{
opacity = Mathf.PingPong(Time.time * blinkSpeed, blinkOffset) + minOpacity;
itemRenderer.color = new Color(originColor.r, originColor.g, originColor.b, opacity);
Debug.Log(itemRenderer.color.a);
}
}
}
背景ではなく取得できるアイテムですよ感を出す
https://gyazo.com/8af8453cb1235773c773c0a7e5554ce1
◆ ステージ遷移でのカメラ移動をスムーズに
カメラ移動が終わったらステージ状態をMOVEに変更してプレイヤーの移動を開始する
code:CameraController.cs
public IEnumerator FollowPlayer()
{
Vector3 targetPos = new Vector3(player.transform.position.x + offsetX, transform.position.y, transform.position.z);
float targetPosX;
float targetPosY;
while ((targetPos - transform.position).magnitude > 0.05f)
{
targetPosX = Mathf.SmoothStep(transform.position.x, targetPos.x, followSpeed);
targetPosY = Mathf.SmoothStep(transform.position.y, targetPos.y, followSpeed);
transform.position = new Vector3(targetPosX, targetPosY, transform.position.z);
yield return new WaitForSeconds(0.001f);
}
stageDirector.stageState = StageDirector.STAGESTATE.MOVE;
yield break;
}
code:PlayerController.cs
IEnumerator ReachStage1Switch(GameObject goalSwitch)
{
StartCoroutine(PushSwitch(goalSwitch));
yield return new WaitWhile(() => goalSwitch);
// カメラを移動
StartCoroutine(cameraController.FollowPlayer());
yield return new WaitUntil(() => stageDirector.stageState == StageDirector.STAGESTATE.MOVE);
bgmDirector.PlayStageMusic();
yield break;
}
https://gyazo.com/1e91b1b9e882617a09f69605de6ed72b
◆ ゴールの時の演出アップデート
オブジェクト消える→ゴールがフェードイン→ゴールにプレイヤー近づく→ゴール到着→画面真っ白→プレイヤーがフェードアウト
ここのコードは今までの使い回しなので割愛
フェード用のコルーチンを作成
code:PlayerController.cs
IEnumerator FadeIn(GameObject fadeObject)
{
SpriteRenderer sprite = fadeObject.GetComponent<SpriteRenderer>();
Color color = sprite.color;
// 最初は見えなくする
fadeObject.SetActive(true);
sprite.color = new Color(color.r, color.g, color.b, 0f);
color.a = 0f;
while (sprite.color.a < 1f)
{
color.a += 0.1f;
sprite.color = new Color(color.r, color.g, color.b, color.a);
yield return new WaitForSeconds(0.05f);
}
yield break;
}
IEnumerator FadeOut(GameObject fadeObject)
{
SpriteRenderer sprite = fadeObject.GetComponent<SpriteRenderer>();
Color color = sprite.color;
while (sprite.color.a > 0f)
{
color.a -= 0.1f;
sprite.color = new Color(color.r, color.g, color.b, color.a);
yield return new WaitForSeconds(0.1f);
}
yield break;
}
code:PlayerController.cs
IEnumerator Goal()
{
goalParticle.SetActive(true);
yield return new WaitForSeconds(0.5f);
StartCoroutine(FadeIn(goal));
yield return new WaitWhile(() => goal.GetComponent<SpriteRenderer>().color.a < 1f);
Vector3 targetPos = new Vector3(goal.transform.position.x, goal.transform.position.y, goal.transform.position.z);
float targetPosX;
float targetPosY;
yield return new WaitForSeconds(0.5f);
while ((targetPos - transform.position).magnitude > 0.05f)
{
targetPosX = Mathf.SmoothStep(transform.position.x, targetPos.x, goalSpeed);
targetPosY = Mathf.SmoothStep(transform.position.y, targetPos.y, goalSpeed);
transform.position = new Vector3(targetPosX, targetPosY, transform.position.z);
yield return new WaitForSeconds(0.01f);
}
yield return new WaitForSeconds(0.8f);
Destroy(background);
Destroy(goal);
Destroy(goalParticle);
yield return new WaitForSeconds(1.5f);
StartCoroutine(FadeOut(this.gameObject));
StartCoroutine(FadeOut(playerAura));
yield return new WaitWhile(() => this.gameObject.GetComponent<SpriteRenderer>().color.a > 0f);
yield return new WaitForSeconds(3f);
stageDirector.EndGame();
yield break;
}
ちょっとゴール感を出したくてパーティクルも試してみた
https://gyazo.com/e2da37af618283d9cbf280eef6f2400fhttps://gyazo.com/6a9f5d1229f5526477e1ff2efab8f617https://gyazo.com/43f52a691d5babf5c688a2fe52bed7ce
https://gyazo.com/f8fbd353ef5e8be8fbcb14f71a88c5d8
(了)
https://gyazo.com/ea38e8d40023a4d62a667463b859b1d4
感想や指摘などあったらどしどし連絡ください!!
もし万が一、気が向いたりして何かコメントをもらえたら超絶喜びます!!Porin.icon