| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- using UnityEngine;
- /* 组件-射击目标-靶子 */
- public class TargetBodyNew : MonoBehaviour
- {
- float distance = 10f;
- public int playerIndex;
- public static TargetBodyNew ins;
- void Start()
- {
- ins = this;
- SetDistance(distance);
- }
- void OnDestroy()
- {
- if (ins == this) ins = null;
- }
- public void Hit(ArrowNew arrow, Vector3 hitPosition, int attackerPlayerIndex)
- {
- transform.Find("PointSignLastHit")?.GetComponent<PointSignLastHit>()?.Show(hitPosition);
- arrow.Hit();
- AudioMgr.ins.PlayHit(AudioMgr.GetAudioSource(gameObject));
- bool hitTarget = false;
- float maxSize = Vector3.Distance(transform.Find("CenterPoint").position, transform.Find("SidePoint").position);
- float radius = measureRadius(hitPosition);
- float score = Mathf.Clamp(10f - radius / maxSize * 10f, 0, 9.9f) + 1;
- if (score >= 1)
- {
- score = (float)System.Math.Round(score, CommonConfig.ringsPrecision);
- if (playerIndex != attackerPlayerIndex) score = 0;
- GameController.ins.HitTarget(score, attackerPlayerIndex);
- //AudioMgr.ins.PlayCheer(true);
- hitTarget = true;
- }
- if (!hitTarget) GameController.ins.HitTarget(0);
- arrow.hitType = hitTarget ? Arrow.HitType.TargetInRing : Arrow.HitType.TargetOutRing;
- }
- float measureRadius(Vector3 position)
- {
- return Vector3.Distance(transform.Find("CenterPoint").position, position);
- }
- public void SetDistance(float value)
- {
- distance = value;
- Vector3 v3 = transform.parent.localPosition;
- v3.z = GameMgr.RealSizeToGameSize(value);
- transform.parent.localPosition = v3;
- }
- public float GetDistance()
- {
- return distance;
- }
- }
|