TargetBody.cs 2.1 KB

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