コード例 #1
0
    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();
            }
        }
    }
コード例 #2
0
    /// <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));
    }