【2DSTG制作】の動画内で表示されるコード:#41 – #50
サムネイルをクリックすると、YouTubeの動画ページに移動します。
#42:ボスユニットの登場演出
LineRenderer_Animation
using UnityEngine;
using DG.Tweening;
// 表示する線
[SerializeField] LineRenderer lineRenderer;
void Start()
{
var sequence = DOTween.Sequence();
// 線の幅を変更する(0 => 0.5)
sequence.Append(DOTween.To(() => lineRenderer.startWidth, num => lineRenderer.startWidth = num, 0.5f, 1.0f))
.Join(DOTween.To(() => lineRenderer.endWidth, num => lineRenderer.endWidth = num, 0.5f, 1.0f))
// 1.5秒待機
.AppendInterval(1.5f)
// 線の幅を0にする(非表示)
.Append(DOTween.To(() => lineRenderer.startWidth, num => lineRenderer.startWidth = num, 0, 1.0f))
.Join(DOTween.To(() => lineRenderer.endWidth, num => lineRenderer.endWidth = num, 0, 1.0f))
// アニメーション終了後に削除
.AppendCallback(() => Destroy(gameObject));
}
#45:緊急回避の実装
指定した位置まで移動させる
using UnityEngine;
using DG.Tweening;
// 再生するアニメーションのトリガー
static int dodgeParamHash = Animator.StringToHash("Dodge");
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// スペースキーが押されたら、緊急回避のアニメーションを再生
animator.SetTrigger(dodgeParamHash);
// 入力されていた方向キーに応じて相対的に移動
if (Input.GetKey(KeyCode.UpArrow) && Input.GetKey(KeyCode.RightArrow)) {
// 入力が右上であれば、右上に移動
transform.DOLocalMove(new Vector2(1, 1), 0.7f).SetRelative(true).SetEase(Ease.OutExpo);
// 入力が右下であれば、右下に移動
} else if (Input.GetKey(KeyCode.DownArrow) && Input.GetKey(KeyCode.RightArrow)) {
transform.DOLocalMove(new Vector2(1, -1), 0.7f).SetRelative(true).SetEase(Ease.OutExpo);
// 中略 //
} else {
// 方向キーが押されていない場合は右に移動
transform.DOLocalMove(new Vector2(1, 0), 0.7f).SetRelative(true).SetEase(Ease.OutExpo);
}
}
}
#46:敵ユニットの移動経路
移動経路の設定
using UnityEngine;
using DG.Tweening;
// ユニットが通過する座標
[SerializeField] Vector3[] wayPoint;
// 移動時間
[SerializeField] float moveTime;
void Start()
{
// 生成したパスに沿って移動させる
transform.DOPath(wayPoint, moveTime, PathType.Linear)
// 等速移動
.SetEase(Ease.Linear)
// 撃破されたらアニメーションを停止
.SetLink(gameObject);
}
#47:ボスの移動パターン
移動経路の切り替え
using UnityEngine;
using DG.Tweening;
// ボスユニットが通過する座標
[SerializeField] Vector3[] wayPointA;
[SerializeField] Vector3[] wayPointB;
// 移動時間
[SerializeField] float moveTime;
Sequence sequence1;
Sequence sequence2;
void Start()
{
sequence1 = DOTween.Sequence()
// パスに沿って移動
.Append(transform.DOPath(wayPointA, moveTime, PathType.Linear).SetOptions(true))
// パスを1周したら少し待機
.AppendInterval(0.5f)
// 無限ループ
.SetLoops(-1)
// 自動で破棄しない
.SetAutoKill(false)
// 自動で再生しない
.Pause()
// オブジェクトが削除されたタイミングで破棄
.SetLink(gameObject);
sequence2 = DOTween.Sequnece()
...
}
public void MovePath1()
{
// 別のパスを停止
sequence2.Pause();
var path1 = DOTween.Sequence();
// パスのスタート地点に移動
path1.Append(transform.DOMove(new Vector3(2.0f, 0, 0), 1.0f))
// アニメーションを再生
.AppendCallback(() => sequence1.Restart())
.SetLink(gameObject);
}





