TargetBody.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using UnityEngine;
  2. /* 组件-射击目标-靶子 */
  3. public class TargetBody : MonoBehaviour
  4. {
  5. [SerializeField] GameObject cameraForTargetView;
  6. float distance = 70f;
  7. public static TargetBody ins;
  8. void Start()
  9. {
  10. ins = this;
  11. SetDistance(distance);
  12. }
  13. void Update()
  14. {
  15. TargetView targetView = TargetView.ins;
  16. if (targetView && targetView.IsOpen() != cameraForTargetView.activeSelf) {
  17. cameraForTargetView.SetActive(targetView.IsOpen());
  18. }
  19. }
  20. public void Hit(Arrow arrow, Vector3 hitPosition) {
  21. arrow.Hit();
  22. AudioMgr.ins.PlayHit(AudioMgr.GetAudioSource(this.gameObject));
  23. bool hitTarget = false;
  24. if (arrow.armBow.validTargets.Contains(this)) {
  25. float maxSize = Vector3.Distance(this.transform.Find("CenterPoint").position, this.transform.Find("SidePoint").position);
  26. float radius = this.measureRadius(hitPosition);
  27. float score = Mathf.Clamp(10f - radius / maxSize * 10f, 0, 9.9f) + 1;
  28. if (score >= 1) {
  29. score = (float)System.Math.Round((double)score, CommonConfig.ringsPrecision);
  30. GameMgr.ins.gameMode.HitTarget(score);
  31. //AudioMgr.ins.PlayCheer(true);
  32. hitTarget = true;
  33. }
  34. }
  35. if (!hitTarget) {
  36. GameMgr.ins.gameMode.HitTarget(0);
  37. //AudioMgr.ins.PlayCheer(false);
  38. }
  39. arrow.hitType = hitTarget ? Arrow.HitType.TargetInRing : Arrow.HitType.TargetOutRing;
  40. }
  41. float measureRadius(Vector3 position) {
  42. return Vector3.Distance(this.transform.Find("CenterPoint").position, position);
  43. }
  44. public void SetDistance(float value) {
  45. distance = value;
  46. Vector3 v3 = this.transform.parent.localPosition;
  47. v3.x = 30 - GameMgr.RealSizeToGameSize(value);
  48. this.transform.parent.localPosition = v3;
  49. }
  50. public float GetDistance() {
  51. return distance;
  52. }
  53. }