using UnityEngine; /* 组件-射击目标-靶子 */ public class TargetBody : MonoBehaviour { [SerializeField] GameObject cameraForTargetView; float distance = 10f; public static TargetBody ins; void Start() { ins = this; SetDistance(distance); } void OnDestroy() { if (ins == this) ins = null; } void Update() { TargetView targetView = TargetView.ins; if (targetView && targetView.IsOpen() != cameraForTargetView.activeSelf) { cameraForTargetView.SetActive(targetView.IsOpen()); } } public void Hit(Arrow arrow, Vector3 hitPosition) { if (PointSignLastHit.ins) PointSignLastHit.ins.Show(hitPosition); arrow.Hit(); AudioMgr.ins.PlayHit(AudioMgr.GetAudioSource(this.gameObject)); bool hitTarget = false; if (arrow.armBow.validTargets.Contains(this)) { float maxSize = Vector3.Distance(this.transform.Find("CenterPoint").position, this.transform.Find("SidePoint").position); float radius = this.measureRadius(hitPosition); float score = Mathf.Clamp(10f - radius / maxSize * 10f, 0, 9.9f) + 1; if (score >= 1) { score = (float)System.Math.Round((double)score, CommonConfig.ringsPrecision); GameMgr.ins.gameMode.HitTarget(score); //AudioMgr.ins.PlayCheer(true); hitTarget = true; } } if (!hitTarget) { GameMgr.ins.gameMode.HitTarget(0); //AudioMgr.ins.PlayCheer(false); } arrow.hitType = hitTarget ? Arrow.HitType.TargetInRing : Arrow.HitType.TargetOutRing; } float measureRadius(Vector3 position) { return Vector3.Distance(this.transform.Find("CenterPoint").position, position); } public void SetDistance(float value) { distance = value; Vector3 v3 = this.transform.parent.localPosition; v3.x = 30 - GameMgr.RealSizeToGameSize(value); this.transform.parent.localPosition = v3; } public float GetDistance() { return distance; } }