public static void OnComplete(GameObject obj) { SceneItemAgent agent = obj.GetComponent <SceneItemAgent>(); CFX_AutoRotate rotate = obj.GetComponent <CFX_AutoRotate>(); GameObject.Destroy(rotate); obj.transform.rotation = Quaternion.Euler(0, obj.transform.eulerAngles.y, 0); if (agent != null) { agent.OnStart(); //agent.SetAsDrop(); if (agent.ItemInfo != null && agent.ItemInfo.IsFlag()) { agent.SetAutoDestroy(3.0f);//镖物归位 } } else { PickupItemAgent a = obj.GetComponent <PickupItemAgent>(); if (a != null) { a.OnStart(); } } }
/// <summary> /// 爆物品 /// </summary> /// <param name="EObject">物品</param> /// <param name="position">角色脚跟位置</param> /// <param name="forward">角色背向</param> /// <param name="ERadius">丢落半径</param> /// <param name="EGroundHeight">离地高度</param> public static void DropItem(GameObject EObject, Vector3 position, Vector3 forward, float ERadius = 100.0f, float EGroundHeight = 10.0f) { //有可能会丢到墙里的。 Vector3 targetPos = (position + 50 * Vector3.up) + ERadius * forward; Vector3 endPoint = targetPos - 20 * Vector3.up; RaycastHit hit; if (Physics.Raycast(targetPos, Vector3.down, out hit, 1000, 1 << LayerMask.NameToLayer("Scene"))) { endPoint = hit.point + EGroundHeight * Vector3.up; } float h = Mathf.Abs((endPoint.y + EGroundHeight) - (position.y + 50)); float t = Mathf.Sqrt(2 * h / (MeteorUnit.gGravity / 10)); EObject.AddComponent <ParaCurve>().Init(endPoint, t, () => { OnComplete(EObject); }); CFX_AutoRotate rotate = EObject.AddComponent <CFX_AutoRotate>(); rotate.rotation = new Vector3(Random.Range(180, 360), Random.Range(180, 360), Random.Range(180, 360)); }