TargetBody.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. arrow.Hit();
  26. AudioMgr.ins.PlayHit(AudioMgr.GetAudioSource(this.gameObject));
  27. bool hitTarget = false;
  28. if (arrow.armBow.validTargets.Contains(this)) {
  29. float maxSize = Vector3.Distance(this.transform.Find("CenterPoint").position, this.transform.Find("SidePoint").position);
  30. float radius = this.measureRadius(hitPosition);
  31. float score = Mathf.Clamp(10f - radius / maxSize * 10f, 0, 9.9f) + 1;
  32. if (score >= 1) {
  33. score = (float)System.Math.Round((double)score, CommonConfig.ringsPrecision);
  34. GameMgr.ins.gameMode.HitTarget(score);
  35. //AudioMgr.ins.PlayCheer(true);
  36. hitTarget = true;
  37. }
  38. }
  39. if (!hitTarget) {
  40. GameMgr.ins.gameMode.HitTarget(0);
  41. //AudioMgr.ins.PlayCheer(false);
  42. }
  43. arrow.hitType = hitTarget ? Arrow.HitType.TargetInRing : Arrow.HitType.TargetOutRing;
  44. }
  45. float measureRadius(Vector3 position) {
  46. return Vector3.Distance(this.transform.Find("CenterPoint").position, position);
  47. }
  48. public void SetDistance(float value) {
  49. distance = value;
  50. Vector3 v3 = this.transform.parent.localPosition;
  51. v3.z = GameMgr.RealSizeToGameSize(value);
  52. this.transform.parent.localPosition = v3;
  53. }
  54. public float GetDistance() {
  55. return distance;
  56. }
  57. }