前回に引き続きビームについて
コンテンツ
現在発生していること
現象はこちら
現象は以下の動画 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 [秒]としました。
同じにしない理由は人間の反応速度的に完全一致していても当たったと感じない。
私も経験しましたがいわゆる「今当たっただろ!」が感じる頻度が非常に高くなるからです。
治ってそうですね。
まとめ
今回に関しては思いの外シンプルに解決しました。
しかし、今回の場合はあまり害はなかったですが、類似処理の発生は気をつけたほうが良いです。
予期せぬバグの発生や調査する他人、未来の自分に迷惑をかけることになるので。
コメントを残す