見出し画像

【Unity】【ゲーム開発】【Tips】アクティブ時に一度だけ自動移動するミニ汎用スクリプト

ゲーム開発をしてる時に、「ちょっとOBJECTに動きを付けたい」時がある。こういう時に汎用で使える小さなスクリプトを作って纏めておき、上記のような時にポチッと付け足せるようにしておくと便利である。

例えば、アクティブ時に一度だけ移動するスクリプト【AutoFirstScroll.sc】

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AutoFirstScroll : MonoBehaviour
{
   public float m_ScrollTime = 1.0f;
   public Vector3 offset = Vector3.zero;
   Vector3 spos;
   Vector3 epos;
   float m_NowTimer = 0.0f;
   bool m_Flag = true;

   private void Awake()
   {
       spos = transform.localPosition + offset;
       epos = transform.localPosition;
       transform.localPosition = spos;
   }

   // Start is called before the first frame update
   void Start()
   {
   }

   // Update is called once per frame
   void Update()
   {

   }

   private void FixedUpdate()
   {
       if (m_Flag)
       {
           float tm = (m_ScrollTime < m_NowTimer) ? m_ScrollTime : m_NowTimer;
           float x = KajyuuHeikin(spos.x, m_ScrollTime - tm, epos.x, tm);
           float y = KajyuuHeikin(spos.y, m_ScrollTime - tm, epos.y, tm);
           float z = KajyuuHeikin(spos.z, m_ScrollTime - tm, epos.z, tm);
           transform.localPosition = new Vector3(x, y, z);
           if (m_ScrollTime < m_NowTimer)
           {
               m_Flag = false;
           }
           m_NowTimer += Time.fixedDeltaTime;
       }
   }

   //Low関数群

   //加重平均
   float KajyuuHeikin(float sx, float n, float ex, float m)
   {
       if ((n + m) == 0.0f)
       {
           return 0.0f;
       }
       return (sx * n + ex * m) / (n + m);
   }
}

※ ScrollTime:移動にかける時間                  ※offset:配置位置から登場位置までの距離(Vector3)

使い方は以下のようにセットして

画像1

ゲーム開始前は非アクティブにしておき、登場させたいタイミングでアクティブにすると

画像2

のようにちょっと動いて登場してくれる。地面から浮き上がり登場させたり、何かの中から出して登場させたい時に使ってます。

過去に作ったゲームなら、ゲッツゲッツゲッツ1号の右手が体の中から出てくる時などに使ってました。

画像3

気楽に動きを付けられるので、汎用的に狙いの動きをする小スクリプトを作って置くと開発はやりやすい。

手持ちの小スクリプトは尽きたので小スクリプトアップは一旦終了します。また汎用性のあるものを作れたなら、その時々でアップします。

以降からはゲーム作成中に困った事が起きてそれにどう対処したかの記憶などをアップしていく予定です。

この記事が気に入ったらサポートをしてみませんか?