public float threshold; // 聞こえる音の閾値。人間の通常状態(立ち)を 1.0f とする。loudness は、種別を超えた対象の興味度を加味した値とする。 public override int scan(TargetFinder3 finder, _Action3[] others, float[] sqrDists) { var sqrLimitDist = distance * distance; var ires = -1; var resLoudness = 0.0f; for (var i = 0; i < others.Length; i++) { if (sqrDists[i] <= sqrLimitDist) { if (capture(finder, others[i]) && others[i].output.loudness > resLoudness) // 音は全候補で最大のものを返す。 { ires = i; resLoudness = others[i].output.loudness; } } else { // これ以上遠いものは打ち切ってOK break; } } return(ires); }
public TargetFinder3.TargetInfoUnit capture(TargetFinder3 finder, _Action3 other, float sqrDist) { foreach (var s in sensors) { if (sqrDist <= s.distance * s.distance && s.capture(finder, other)) { Destroy(Instantiate(s.hint, finder.tfSensor.position, finder.rb.rotation), 1.0f); // return(new TargetFinder3.TargetInfoUnit(other, s.errRadius)); } } return(new TargetFinder3.TargetInfoUnit()); }
public override bool capture(TargetFinder3 finder, _Action3 target) { var visible = false; var senspos = finder.tfSensor.position; var targpos = target.tfObservedCenter.position; visible = !Physics.Linecast(senspos, targpos, UserLayer.sensorEyeOcculusion); return(visible); }
public TargetFinder3.TargetInfoUnit scan(TargetFinder3 finder, _Action3[] others, float[] sqrDists) { foreach (var s in sensors) { var i = s.scan(finder, others, sqrDists); if (i != -1) { Destroy(Instantiate(s.hint, finder.tfSensor.position, finder.rb.rotation), 1.0f); // return(new TargetFinder3.TargetInfoUnit(others[i], s.errRadius)); } } return(new TargetFinder3.TargetInfoUnit()); }
public override bool capture(TargetFinder3 finder, _Action3 target) { var visible = false; var senspos = finder.tfSensor.position; var targpos = target.tfObservedCenter.position; var forward = finder.tfSensor.forward; var dir = (targpos - senspos).normalized; if (Vector3.Dot(forward, dir) >= cosDirectivity) { visible = !Physics.Linecast(senspos, targpos, UserLayer.sensorEyeOcculusion); } return(visible); }
public override int scan(TargetFinder3 finder, _Action3[] others, float[] sqrDists) { var sqrLimitDist = distance * distance; for (var i = 0; i < others.Length; i++) { if (sqrDists[i] <= sqrLimitDist) { if (capture(finder, others[i])) { return(i); } } else { // これ以上遠いものは打ち切ってOK break; } } return(-1); }
public override bool concentrate(TargetFinder3 finder) { return(false); }
public override bool capture(TargetFinder3 finder, _Action3 target) { return(target.output.loudness >= threshold); // * finder.sensitiveRateR; }
public virtual bool concentrate(TargetFinder3 finder) { return(false); }
public virtual bool capture(TargetFinder3 finder, _Action3 target) { return(false); }
public virtual int scan(TargetFinder3 finder, _Action3[] others, float[] sqrDists) { return(-1); }