using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 设置泄漏点朝向 /// public class SetFireDire : MonoBehaviour { public void SetDirec(RaycastHit hit) { SetFireYScale( hit); StartCoroutine(delay(hit)); } IEnumerator delay(RaycastHit hit) { yield return new WaitForEndOfFrame(); Transform transCenter = hit.collider.transform.Find("Center"); if (transCenter==null) { GameObject obj = new GameObject("Center"); obj.transform.SetParent(hit.collider.transform); obj.transform.localEulerAngles = Vector3.zero; obj.transform.localPosition = Vector3.zero; transCenter = obj.transform; } Vector3 vec1, vec2; vec1 = hit.point- new Vector3(transCenter.position.x,hit.point.y,transCenter.position.z); vec2 =transform.forward; vec1 = vec1.normalized; float fangxiang = (Vector3.Cross(vec2, vec1).y > 0 ? 1 : -1); float jiaJiao = Vector3.Angle(vec2, vec1); if (name.Contains("guanTiFire")) { transform.eulerAngles = new Vector3(0, /*180 - */jiaJiao * fangxiang-180, 0); // transform.localPosition += new Vector3(0, 4, (-1f * fangxiang)); } else { transform.eulerAngles = new Vector3(0, jiaJiao * fangxiang, 0); } } ///// ///// 设置Y轴缩放,使火焰可以流到地面 ///// void SetFireYScale(RaycastHit hitGuanTi) { // 设置Y轴长度,是它能流掉地面 if (name.Contains("guanTiFire")) { Transform ranyou = transform.Find("ranyou"); float particleLength = /*(ranyou.position.y * .9f - transform.position.y)*/ transform.Find("Oil").GetComponent().sharedMesh.bounds.size.z * 2; Ray ray = new Ray(ranyou.position, -transform.up); RaycastHit hitinfo; if (Physics.Raycast(ray, out hitinfo, 100, LayerMask.GetMask("dimian"))) {//碰到地面层 float length = -hitinfo.collider.transform.position.y + ranyou.position.y; float scale1 = length / particleLength;//燃油粒子高度/粒子整体高度,得到一个缩放比 transform.localScale *= (scale1 * scale1); // Debug.Log("油罐高度:" + hitGuanTi.collider.bounds.size.y + " 粒子现在的长度:" + (ranyou.position.y-hitinfo.collider.transform.position.y) ); //TODO 如果缩放过高,会使燃油的高度超出油罐的高度,此时需要调整 ResetParticlePos(ranyou.position.y - hitinfo.collider.transform.position.y, hitGuanTi.collider.bounds.size.y, hitinfo); Transform transRanyou = transform.Find("RanYou"); transRanyou.position = new Vector3(transRanyou.position.x, hitinfo.point.y + .15f, transRanyou.position.z); } } } void ResetParticlePos(float particleLength,float oilTankHeight,RaycastHit hitGround) { //当缩放完成后,如果粒子的最高点高于油罐高度,则需要对粒子高度进行重新的调整 if (particleLength