ビームエフェクトのバグについて

前回に引き続きビームについて

現在発生していること

現象はこちら

現象は以下の動画 00:13~ が結構見やすいです。

単発ビームを打つことで判定が残りに俗に言う置きビームが発生しているようです。

このように昔発射したビームがヒットしてしてます。

原因

原因としては複数のスクリプトの処理の重複で発生しているようでした。

ビームのスクリプトにこのようなシンプルなスクリプトがつけられてました。

↓3秒で自分を破棄するスクリプト

public class AutoDestroy : MonoBehaviour {

	public float DestroyTime = 3.0f;

	// Use this for initialization
	void Start () {
		Destroy(gameObject, DestroyTime);
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}

3秒で事故を破棄する単純なスクリプトです。

一見事故になりようのないスクリプトです。(それはそれで3 [秒]は長い…)

そして前回のこちらのアセット

ビーム関するパラメータをセットし独自でビームの寿命をセットできます。

public float AnimationSpd = 0.1f;	

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

	NowAnm+=AnimationSpd;

	if(NowAnm > 1.0)
	{
		Destroy(this.gameObject);
	}
	LineFunc();
}

AnimationSpdの値を加算して1.0を超えたとき破棄されます。

その値はなんと0.1がセットされてました。

この場合30 [フレーム]で1 [秒]だとすると

10 * 1/30 = 0.33…..

約0.3 [秒]で見た目は表示されなくなります

つまり

見た目は0.3 [秒]だけ表示され、

判定は3 [秒]残ります。

2.7 [秒]だけ置きビームが発生していることになりますね。

解決方法

解決方法は多数ありますが、今回の場合はシンプルに対処することにしました。

見た目と判定の差異をなくしていけば良いことになります。

今回の場合は

見た目は約0.3 [秒]、判定は0.5 [秒]としました。

同じにしない理由は人間の反応速度的に完全一致していても当たったと感じない。

私も経験しましたがいわゆる「今当たっただろ!」が感じる頻度が非常に高くなるからです。

治ってそうですね。

まとめ

今回に関しては思いの外シンプルに解決しました。

しかし、今回の場合はあまり害はなかったですが、類似処理の発生は気をつけたほうが良いです。

予期せぬバグの発生や調査する他人、未来の自分に迷惑をかけることになるので。


コメントを残す

メールアドレスが公開されることはありません。

ABOUT US
vuniformity誰でもない人
トレンドの行く末を見守っている
仮名を名乗るエンジニア

ゲーム開発は仕事であり趣味である
プログラムだけでなく多種多様なスキルを数多く持つ

ゲーム開発は
ソーシャルゲームを開発運用の経験アリ
ゲーム以外にも経験アリ
Webサービス保守開発等に携わる

ゲームプレイの主な戦場は
FGO
FEH
MTGA
マビノギ
ここでは主にunityroomで公開しているゲーム作り直しの軌跡を綴っていきます