TargetBody.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using UnityEngine;
  2. public class TargetBody : MonoBehaviour
  3. {
  4. [SerializeField] GameObject cameraForTargetView;
  5. float distance = 70f;
  6. public static TargetBody ins;
  7. void Start()
  8. {
  9. ins = this;
  10. SetDistance(distance);
  11. }
  12. void Update()
  13. {
  14. TargetView targetView = TargetView.ins;
  15. if (targetView && targetView.IsOpen() != cameraForTargetView.activeSelf) {
  16. cameraForTargetView.SetActive(targetView.IsOpen());
  17. }
  18. }
  19. void OnCollisionEnter(Collision collision) {
  20. Arrow arrow = collision.transform.GetComponent<Arrow>();
  21. if (arrow)
  22. {
  23. Hit(arrow, collision.contacts[0].point);
  24. }
  25. }
  26. public void Hit(Arrow arrow, Vector3 hitPosition) {
  27. arrow.transform.Find("Head").position = hitPosition;
  28. arrow.Hit();
  29. AudioMgr.ins.PlayHit(AudioMgr.GetAudioSource(this.gameObject));
  30. bool hitTarget = false;
  31. if (arrow.armBow.validTargets.Contains(this)) {
  32. float maxSize = Vector3.Distance(this.transform.Find("CenterPoint").position, this.transform.Find("SidePoint").position);
  33. float radius = this.measureRadius(hitPosition);
  34. int score = 10 - Mathf.FloorToInt(radius / maxSize * 10);
  35. if (score > 0) {
  36. GameMgr.ins.gameMode.HitTarget(score);
  37. AudioMgr.ins.PlayCheer(true);
  38. hitTarget = true;
  39. }
  40. }
  41. if (!hitTarget) {
  42. GameMgr.ins.gameMode.HitTarget(0);
  43. AudioMgr.ins.PlayCheer(false);
  44. }
  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. }