using System.Collections; using System.Collections.Generic; using UnityEngine; public class ArrowSync : MonoBehaviour { void Awake() { this.transform.Find("Head/_hunse_jian").gameObject.layer = 0; } void Update() { transform.position = Vector3.Lerp(transform.position, position, Time.deltaTime * 15); Head().position = transform.position; transform.rotation = Quaternion.Lerp(transform.rotation, rotation, Time.deltaTime * 15); } public Transform Head() { return transform.Find("Head"); } Quaternion rotation; Vector3 position; bool hasPlayHitAudio = false; [System.NonSerialized] public bool isHit; [System.NonSerialized] public bool canUseSideCamera; [System.NonSerialized] public bool hasSetSyncData = false; //外部运算用的 public void SetSyncData(SyncData syncData, bool apply = false) { rotation.x = syncData.rx; rotation.y = syncData.ry; rotation.z = syncData.rz; rotation.w = syncData.rw; position.x = syncData.px; position.y = syncData.py; position.z = syncData.pz; canUseSideCamera = syncData.cs; isHit = syncData.ih; if (apply) { transform.position = position; transform.rotation = rotation; //激活镜头 Transform cameraTF = this.transform.Find("Camera"); cameraTF.gameObject.SetActive(true); ArrowCamera arrowCameraComp = cameraTF.gameObject.AddComponent(); arrowCameraComp.SetArrowSync(this); //射出的声音 AudioMgr.ins.PlayShoot(AudioMgr.GetAudioSource(this.gameObject)); } if (isHit && !hasPlayHitAudio) { hasPlayHitAudio = true; int hitType = syncData.ht; if (hitType == 1 || hitType == 2) { AudioMgr.ins.PlayHit(AudioMgr.GetAudioSource(TargetBody.ins.gameObject)); AudioMgr.ins.PlayCheer(hitType == 1 ? true : false); } else if (hitType == 4 || hitType == 5) { AudioMgr.ins.PlayArrowEnter(); } else if (hitType == 3) { AudioMgr.ins.PlayCheer(false); } } } public class SyncData { [System.NonSerialized] public bool inited; static int autoID; public int id; public float rx; public float ry; public float rz; public float rw; public float px; public float py; public float pz; public bool cs; public bool ih; public int ht; public void SetData(Arrow arrow) { Quaternion r = arrow.transform.rotation; Vector3 p = arrow.Head().transform.position; rx = r.x; ry = r.y; rz = r.z; rw = r.w; px = p.x; py = p.y; pz = p.z; cs = arrow.canUseSideCamera; ih = arrow.isHit; ht = arrow.hitType; if (!inited) { id = autoID++; if (autoID > 1000) autoID = 0; } inited = true; } } }