わかりを得た

Unityとかゲーム開発について共有できそうなやつ

ステートマシン

正直この程度の事は誰でも思いついてると思うけど
これについて書いてる記事を見たことがないので一応書いておこ
最初のエントリーだしね

たいへん簡易なタイムライン機能って感じのやつです

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

public class statemachine : MonoBehaviour
{

int state=0;
int count=0;


	void Update()
	{
		if(state==0)
		{
		if(count==50)Debug.Log("state0の50フレーム目です");
		movestate(1,100);	//100f後にstate1へ
		}

		if(state==1)
		{
		if(count==20)Debug.Log("state1の20フレーム目です");
		movestate(0,100);	//100f後にstate0へ
		}

		count++;

	}

	void movestate(int ST,int CT=0)
	{
		if(count>=CT)
		{
		state=ST;
		count=0;		
		}
	}

}


とまあこうすればif(count==***)のフレームでだけ発火するような動作が書けるわけです。
例えばstate1のcount5で弾を撃ち、30f後にstate0に戻るとかね

Update() 内に書くと、144Hzとかのクソ速いディスプレイが繋がってる環境だと爆速で動いてしまうので
FixedUpdate()内に書くとかApplication.targetFrameRate=60;をどっかで入れるとか
そもそもcountをfloatに改造するとか工夫が必要ですが
うちのゲームのキャラクターはだいたいこれをベースにいじったやつで動いてます
変数だけで書けるから好き!

IEnumerator?めんどくさいから使わない


ほなまた