TargetBody.cs 2.1 KB

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