TargetBody.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using UnityEngine;
  2. public class TargetBody : MonoBehaviour
  3. {
  4. float distance = 70f;
  5. void Start()
  6. {
  7. SetDistance(distance);
  8. }
  9. void OnCollisionEnter(Collision collision) {
  10. Arrow arrow = collision.transform.GetComponent<Arrow>();
  11. if (arrow)
  12. {
  13. arrow.transform.Find("Head").position = collision.contacts[0].point;
  14. arrow.Hit();
  15. AudioMgr.ins.PlayHit(AudioMgr.GetAudioSource(this.gameObject));
  16. bool hitTarget = false;
  17. if (arrow.armBow.validTargets.Contains(this)) {
  18. float maxSize = Vector3.Distance(this.transform.Find("CenterPoint").position, this.transform.Find("SidePoint").position);
  19. float radius = this.measureRadius(collision.contacts[0].point);
  20. int score = 10 - Mathf.FloorToInt(radius / maxSize * 5);
  21. if (score > 5) {
  22. GameMgr.ins.gameMode.HitTarget(score);
  23. AudioMgr.ins.PlayCheer(true);
  24. hitTarget = true;
  25. }
  26. }
  27. if (!hitTarget) {
  28. GameMgr.ins.gameMode.HitTarget(0);
  29. AudioMgr.ins.PlayCheer(false);
  30. }
  31. }
  32. }
  33. float measureRadius(Vector3 position) {
  34. return Vector3.Distance(this.transform.Find("CenterPoint").position, position);
  35. }
  36. public void SetDistance(float value) {
  37. distance = value;
  38. Vector3 v3 = this.transform.parent.localPosition;
  39. v3.x = 7.718f + (-17.12f - 7.718f) * ((value - 10f) / 60f);
  40. this.transform.parent.localPosition = v3;
  41. }
  42. public float GetDistance() {
  43. return distance;
  44. }
  45. }