| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- 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;
- }
- }
|