TargetBody.cs 1.7 KB

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