{"id":961,"date":"2023-10-12T13:44:56","date_gmt":"2023-10-12T05:44:56","guid":{"rendered":"http:\/\/meecarlo.com\/?p=961"},"modified":"2023-10-12T14:14:45","modified_gmt":"2023-10-12T06:14:45","slug":"%e7%89%a9%e4%bd%93%e9%81%ae%e6%8c%a1%e5%89%94%e9%99%a4%e5%a4%84%e7%90%86","status":"publish","type":"post","link":"https:\/\/meecarlo.com\/old\/2023\/10\/12\/%e7%89%a9%e4%bd%93%e9%81%ae%e6%8c%a1%e5%89%94%e9%99%a4%e5%a4%84%e7%90%86\/","title":{"rendered":"\u7269\u4f53\u906e\u6321\u5254\u9664\u5904\u7406"},"content":{"rendered":"\n<p>\u5148\u770b\u4e0b\u6548\u679c<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"http:\/\/meecarlo.com\/wp-content\/uploads\/2023\/10\/movie_001.mp4\"><\/video><\/figure>\n\n\n\n<p>\u89c6\u9891\u6709\u538b\u7f29\uff0c\u6548\u679c\u6709\u70b9\u4e0d\u5bf9\uff0c\u4e0b\u9762\u662f\u6b63\u786e\u7684\u6548\u679c<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"557\" src=\"http:\/\/meecarlo.com\/wp-content\/uploads\/2023\/10\/FadingEffect1-1024x557.png\" alt=\"\" class=\"wp-image-963\" srcset=\"https:\/\/meecarlo.com\/old\/wp-content\/uploads\/2023\/10\/FadingEffect1-1024x557.png 1024w, https:\/\/meecarlo.com\/old\/wp-content\/uploads\/2023\/10\/FadingEffect1-300x163.png 300w, https:\/\/meecarlo.com\/old\/wp-content\/uploads\/2023\/10\/FadingEffect1-768x417.png 768w, https:\/\/meecarlo.com\/old\/wp-content\/uploads\/2023\/10\/FadingEffect1-1536x835.png 1536w, https:\/\/meecarlo.com\/old\/wp-content\/uploads\/2023\/10\/FadingEffect1.png 1928w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u5148\u4e0a\u4e24\u6bb5\u4ee3\u7801<\/p>\n\n\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nusing System;\nusing System.Collections.Generic;\nusing UnityEngine;\n\npublic class FadingObject : MonoBehaviour, IEquatable&lt;FadingObject&gt;\n{\n    public List&lt;Renderer&gt; Renderers = new List&lt;Renderer&gt;();\n    public Vector3 Position;\n    public List&lt;Material&gt; Materials = new List&lt;Material&gt;();\n    [HideInInspector]\n    public float InitialAlpha;\n    \/\/public float InitialFadeScale;\n\n\n    private void Awake()\n    {\n        Position = transform.position;\n\n        if (Renderers.Count == 0)\n        {\n            Renderers.AddRange(GetComponentsInChildren&lt;Renderer&gt;());\n        }\n        foreach(Renderer renderer in Renderers)\n        {\n            Materials.AddRange(renderer.materials);\n        }\n\n        InitialAlpha = Materials[0].color.a;\n        Materials[0].SetFloat(&quot;_DitherThreshold&quot;, 1f);\n    }\n\n    public bool Equals(FadingObject other)\n    {\n        return Position.Equals(other.Position);\n    }\n\n    public override int GetHashCode()\n    {\n        return Position.GetHashCode();\n    }\n}\n\n<\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nusing System.Collections;\nusing System.Collections.Generic;\nusing UnityEngine;\n\npublic class FadeObjectBlockingObject : MonoBehaviour\n{\n    [SerializeField]\n    private LayerMask LayerMask;\n    [SerializeField]\n    private Transform Target;\n    [SerializeField]\n    private Camera Camera;\n    [SerializeField]\n    [Range(0, 1f)]\n    private float FadedAlpha = 0.33f;\n    [SerializeField]\n    private bool RetainShadows = true;\n    [SerializeField]\n    private Vector3 TargetPositionOffset = Vector3.up;\n    [SerializeField]\n    private float FadeSpeed = 1;\n\n    [Header(&quot;Read Only Data&quot;)]\n    [SerializeField]\n    private List&lt;FadingObject&gt; ObjectsBlockingView = new List&lt;FadingObject&gt;();\n    private Dictionary&lt;FadingObject, Coroutine&gt; RunningCoroutines = new Dictionary&lt;FadingObject, Coroutine&gt;();\n\n    private RaycastHit[] Hits = new RaycastHit[10];\n\n    private void OnEnable()\n    {\n        StartCoroutine(CheckForObjects());\n    }\n\n    private IEnumerator CheckForObjects()\n    {\n        while (true)\n        {\n            int hits = Physics.RaycastNonAlloc(\n                Camera.transform.position,\n                (Target.transform.position + TargetPositionOffset - Camera.transform.position).normalized,\n                Hits,\n                Vector3.Distance(Camera.transform.position, Target.transform.position + TargetPositionOffset),\n                LayerMask\n            );\n\n            if (hits &gt; 0)\n            {\n                for (int i = 0; i &lt; hits; i++)\n                {\n                    FadingObject fadingObject = GetFadingObjectFromHit(Hits[i]);\n\n                    if (fadingObject != null &amp;amp;&amp;amp; !ObjectsBlockingView.Contains(fadingObject))\n                    {\n                        if (RunningCoroutines.ContainsKey(fadingObject))\n                        {\n                            if (RunningCoroutines[fadingObject] != null)\n                            {\n                                StopCoroutine(RunningCoroutines[fadingObject]);\n                            }\n\n                            RunningCoroutines.Remove(fadingObject);\n                        }\n\n                        RunningCoroutines.Add(fadingObject, StartCoroutine(FadeObjectOut(fadingObject)));\n                        ObjectsBlockingView.Add(fadingObject);\n                    }\n                }\n            }\n\n            FadeObjectsNoLongerBeingHit();\n\n            ClearHits();\n\n            yield return null;\n        }\n    }\n\n    private void FadeObjectsNoLongerBeingHit()\n    {\n        List&lt;FadingObject&gt; objectsToRemove = new List&lt;FadingObject&gt;(ObjectsBlockingView.Count);\n\n        foreach (FadingObject fadingObject in ObjectsBlockingView)\n        {\n            bool objectIsBeingHit = false;\n            for (int i = 0; i &lt; Hits.Length; i++)\n            {\n                FadingObject hitFadingObject = GetFadingObjectFromHit(Hits[i]);\n                if (hitFadingObject != null &amp;amp;&amp;amp; fadingObject == hitFadingObject)\n                {\n                    objectIsBeingHit = true;\n                    break;\n                }\n            }\n\n            if (!objectIsBeingHit)\n            {\n                if (RunningCoroutines.ContainsKey(fadingObject))\n                {\n                    if (RunningCoroutines[fadingObject] != null)\n                    {\n                        StopCoroutine(RunningCoroutines[fadingObject]);\n                    }\n                    RunningCoroutines.Remove(fadingObject);\n                }\n\n                RunningCoroutines.Add(fadingObject, StartCoroutine(FadeObjectIn(fadingObject)));\n                 objectsToRemove.Add(fadingObject);\n            }\n        }\n\n        foreach(FadingObject removeObject in objectsToRemove)\n        {\n            ObjectsBlockingView.Remove(removeObject);\n        }\n    }\n\n    private IEnumerator FadeObjectOut(FadingObject FadingObject)\n    {\n        foreach (Material material in FadingObject.Materials)\n        {\n            material.SetInt(&quot;_SrcBlend&quot;, (int)UnityEngine.Rendering.BlendMode.SrcAlpha);\n            material.SetInt(&quot;_DstBlend&quot;, (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);\n            material.SetInt(&quot;_ZWrite&quot;, 0);\n            material.SetInt(&quot;_Surface&quot;, 1);\n\n            material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent;\n\n            material.SetShaderPassEnabled(&quot;DepthOnly&quot;, false);\n            material.SetShaderPassEnabled(&quot;SHADOWCASTER&quot;, RetainShadows);\n\n            material.SetOverrideTag(&quot;RenderType&quot;, &quot;Transparent&quot;);\n\n            material.EnableKeyword(&quot;_SURFACE_TYPE_TRANSPARENT&quot;);\n            material.EnableKeyword(&quot;_ALPHAPREMULTIPLY_ON&quot;);\n        }\n\n        float time = 0;\n\n        while (FadingObject.Materials[0].color.a &gt; FadedAlpha)\n        {\n            foreach (Material material in FadingObject.Materials)\n            {\n                if (material.HasProperty(&quot;_BaseColor&quot;))\n                {\n                    float a = Mathf.Lerp(FadingObject.InitialAlpha, FadedAlpha, time * FadeSpeed);\n                    material.color = new Color(\n                        material.color.r,\n                        material.color.g,\n                        material.color.b,\n                        a\n                        \n                    );\n\n                    \/\/print(&quot;_1&quot;);\n                    \/\/Setting fade value\n                    material.SetFloat(&quot;_DitherThreshold&quot;, a);\n                }\n            }\n\n            time += Time.deltaTime;\n            yield return null;\n        }\n\n        if (RunningCoroutines.ContainsKey(FadingObject))\n        {\n            StopCoroutine(RunningCoroutines[FadingObject]);\n            RunningCoroutines.Remove(FadingObject);\n        }\n    }\n\n    private IEnumerator FadeObjectIn(FadingObject FadingObject)\n    {\n        float time = 0;\n\n        while (FadingObject.Materials[0].color.a &lt; FadingObject.InitialAlpha)\n        {\n            foreach (Material material in FadingObject.Materials)\n            {\n                if (material.HasProperty(&quot;_BaseColor&quot;))\n                {\n                    float a = Mathf.Lerp(FadedAlpha, FadingObject.InitialAlpha, time * FadeSpeed);\n\n                    material.color = new Color(\n                        material.color.r,\n                        material.color.g,\n                        material.color.b,\n                        a\n                    );\n\n                    \/\/Setting fade value\n                    material.SetFloat(&quot;_DitherThreshold&quot;, a);\n\n                }\n            }\n\n            time += Time.deltaTime;\n            yield return null;\n        }\n\n        foreach (Material material in FadingObject.Materials)\n        {\n            material.SetInt(&quot;_SrcBlend&quot;, (int)UnityEngine.Rendering.BlendMode.One);\n            material.SetInt(&quot;_DstBlend&quot;, (int)UnityEngine.Rendering.BlendMode.Zero);\n            material.SetInt(&quot;_ZWrite&quot;, 1);\n            material.SetInt(&quot;_Surface&quot;, 0);\n\n            material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Geometry;\n\n            material.SetShaderPassEnabled(&quot;DepthOnly&quot;, true);\n            material.SetShaderPassEnabled(&quot;SHADOWCASTER&quot;, true);\n\n            material.SetOverrideTag(&quot;RenderType&quot;, &quot;Opaque&quot;);\n\n            material.DisableKeyword(&quot;_SURFACE_TYPE_TRANSPARENT&quot;);\n            material.DisableKeyword(&quot;_ALPHAPREMULTIPLY_ON&quot;);\n        }\n\n        if (RunningCoroutines.ContainsKey(FadingObject))\n        {\n            StopCoroutine(RunningCoroutines[FadingObject]);\n            RunningCoroutines.Remove(FadingObject);\n        }\n    }\n\n    private void ClearHits()\n    {\n        System.Array.Clear(Hits, 0, Hits.Length);\n    }\n\n    private FadingObject GetFadingObjectFromHit(RaycastHit Hit)\n    {\n        return Hit.collider != null ? Hit.collider.GetComponent&lt;FadingObject&gt;() : null;\n    }\n\n}\n\n<\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<p>\u653e\u4e00\u4e2a\u81ea\u52a8\u6293\u53d6\u573a\u666f\u4e2d\u7684\u7269\u4f53\u7136\u540e\u518d\u5b9e\u73b0\u906e\u6321\u5904\u7406\u7684\u811a\u672c\uff0c\u8fd9\u4e2a\u4e3b\u8981\u662f\u7528\u5728main camera\u9700\u8981\u4ece\u5168\u5c40\u8c03\u7528\u7684\u573a\u666f<\/p>\n\n\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nusing System.Collections;\nusing System.Collections.Generic;\nusing UnityEngine;\n\npublic class FadeObjectBlockingObject : MonoBehaviour\n{\n    [SerializeField]\n    private LayerMask LayerMask;\n    [SerializeField]\n    private Transform Target;\n    [SerializeField]\n    private Camera Camera;\n    [SerializeField]\n    [Range(0, 1f)]\n    private float FadedAlpha = 0.33f;\n    [SerializeField]\n    private bool RetainShadows = true;\n    [SerializeField]\n    private Vector3 TargetPositionOffset = Vector3.up;\n    [SerializeField]\n    private float FadeSpeed = 1;\n\n    [Header(&quot;Read Only Data&quot;)]\n    [SerializeField]\n    private List&lt;FadingObject&gt; ObjectsBlockingView = new List&lt;FadingObject&gt;();\n    private Dictionary&lt;FadingObject, Coroutine&gt; RunningCoroutines = new Dictionary&lt;FadingObject, Coroutine&gt;();\n\n    private RaycastHit[] Hits = new RaycastHit[10];\n    void Start()\n    {\n        this.Camera = Camera.main;\n        this.Target = this.transform;\n        if (this.transform.parent.name == &quot;ePlayer&quot;)\n        {\n            StartCoroutine(CheckForObjects());    \n        }\n    }\n\n    private void OnEnable()\n    {\n        \n    }\n\n    private IEnumerator CheckForObjects()\n    {\n        while (true)\n        {\n            int hits = Physics.RaycastNonAlloc(\n                Camera.transform.position,\n                (Target.transform.position + TargetPositionOffset - Camera.transform.position).normalized,\n                Hits,\n                Vector3.Distance(Camera.transform.position, Target.transform.position + TargetPositionOffset),\n                LayerMask\n            );\n\n            \/\/ Gizmos.DrawLine(Camera.transform.position, Target.transform.position);\n            \/\/ Debug.DrawLine(Camera.transform.position, Target.transform.position , Color.red, 0.5f ); \n            if (hits &gt; 0)\n            {\n                for (int i = 0; i &lt; hits; i++)\n                {\n                    FadingObject fadingObject = GetFadingObjectFromHit(Hits[i]);\n\n                    if (fadingObject != null &amp;amp;&amp;amp; !ObjectsBlockingView.Contains(fadingObject))\n                    {\n                        if (RunningCoroutines.ContainsKey(fadingObject))\n                        {\n                            if (RunningCoroutines[fadingObject] != null)\n                            {\n                                StopCoroutine(RunningCoroutines[fadingObject]);\n                            }\n\n                            RunningCoroutines.Remove(fadingObject);\n                        }\n\n                        RunningCoroutines.Add(fadingObject, StartCoroutine(FadeObjectOut(fadingObject)));\n                        ObjectsBlockingView.Add(fadingObject);\n                    }\n                }\n            }\n\n            FadeObjectsNoLongerBeingHit();\n\n            ClearHits();\n\n            yield return null;\n        }\n    }\n\n    private void FadeObjectsNoLongerBeingHit()\n    {\n        List&lt;FadingObject&gt; objectsToRemove = new List&lt;FadingObject&gt;(ObjectsBlockingView.Count);\n\n        foreach (FadingObject fadingObject in ObjectsBlockingView)\n        {\n            bool objectIsBeingHit = false;\n            for (int i = 0; i &lt; Hits.Length; i++)\n            {\n                FadingObject hitFadingObject = GetFadingObjectFromHit(Hits[i]);\n                if (hitFadingObject != null &amp;amp;&amp;amp; fadingObject == hitFadingObject)\n                {\n                    objectIsBeingHit = true;\n                    break;\n                }\n            }\n\n            if (!objectIsBeingHit)\n            {\n                if (RunningCoroutines.ContainsKey(fadingObject))\n                {\n                    if (RunningCoroutines[fadingObject] != null)\n                    {\n                        StopCoroutine(RunningCoroutines[fadingObject]);\n                    }\n                    RunningCoroutines.Remove(fadingObject);\n                }\n\n                RunningCoroutines.Add(fadingObject, StartCoroutine(FadeObjectIn(fadingObject)));\n                 objectsToRemove.Add(fadingObject);\n            }\n        }\n\n        foreach(FadingObject removeObject in objectsToRemove)\n        {\n            ObjectsBlockingView.Remove(removeObject);\n        }\n    }\n\n    private IEnumerator FadeObjectOut(FadingObject FadingObject)\n    {\n        foreach (Material material in FadingObject.Materials)\n        {\n            material.SetInt(&quot;_SrcBlend&quot;, (int)UnityEngine.Rendering.BlendMode.SrcAlpha);\n            material.SetInt(&quot;_DstBlend&quot;, (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);\n            material.SetInt(&quot;_ZWrite&quot;, 0);\n            material.SetInt(&quot;_Surface&quot;, 1);\n\n            material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent;\n\n            material.SetShaderPassEnabled(&quot;DepthOnly&quot;, false);\n            material.SetShaderPassEnabled(&quot;SHADOWCASTER&quot;, RetainShadows);\n\n            material.SetOverrideTag(&quot;RenderType&quot;, &quot;Transparent&quot;);\n\n            material.EnableKeyword(&quot;_SURFACE_TYPE_TRANSPARENT&quot;);\n            material.EnableKeyword(&quot;_ALPHAPREMULTIPLY_ON&quot;);\n        }\n\n        float time = 0;\n\n        while (FadingObject.Materials[0].color.a &gt; FadedAlpha)\n        {\n            foreach (Material material in FadingObject.Materials)\n            {\n                if (material.HasProperty(&quot;_BaseColor&quot;))\n                {\n                    float a = Mathf.Lerp(FadingObject.InitialAlpha, FadedAlpha, time * FadeSpeed);\n                    material.color = new Color(\n                        material.color.r,\n                        material.color.g,\n                        material.color.b,\n                        a\n                        \n                    );\n\n                    \/\/print(&quot;_1&quot;);\n                    \/\/Setting fade value\n                    material.SetFloat(&quot;_DitherThreshold&quot;, a);\n                }\n            }\n\n            time += Time.deltaTime;\n            yield return null;\n        }\n\n        if (RunningCoroutines.ContainsKey(FadingObject))\n        {\n            StopCoroutine(RunningCoroutines[FadingObject]);\n            RunningCoroutines.Remove(FadingObject);\n        }\n    }\n\n    private IEnumerator FadeObjectIn(FadingObject FadingObject)\n    {\n        float time = 0;\n\n        while (FadingObject.Materials[0].color.a &lt; FadingObject.InitialAlpha)\n        {\n            foreach (Material material in FadingObject.Materials)\n            {\n                if (material.HasProperty(&quot;_BaseColor&quot;))\n                {\n                    float a = Mathf.Lerp(FadedAlpha, FadingObject.InitialAlpha, time * FadeSpeed);\n\n                    material.color = new Color(\n                        material.color.r,\n                        material.color.g,\n                        material.color.b,\n                        a\n                    );\n\n                    \/\/Setting fade value\n                    material.SetFloat(&quot;_DitherThreshold&quot;, a);\n\n                }\n            }\n\n            time += Time.deltaTime;\n            yield return null;\n        }\n\n        foreach (Material material in FadingObject.Materials)\n        {\n            material.SetInt(&quot;_SrcBlend&quot;, (int)UnityEngine.Rendering.BlendMode.One);\n            material.SetInt(&quot;_DstBlend&quot;, (int)UnityEngine.Rendering.BlendMode.Zero);\n            material.SetInt(&quot;_ZWrite&quot;, 1);\n            material.SetInt(&quot;_Surface&quot;, 0);\n\n            material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Geometry;\n\n            material.SetShaderPassEnabled(&quot;DepthOnly&quot;, true);\n            material.SetShaderPassEnabled(&quot;SHADOWCASTER&quot;, true);\n\n            material.SetOverrideTag(&quot;RenderType&quot;, &quot;Opaque&quot;);\n\n            material.DisableKeyword(&quot;_SURFACE_TYPE_TRANSPARENT&quot;);\n            material.DisableKeyword(&quot;_ALPHAPREMULTIPLY_ON&quot;);\n        }\n\n        if (RunningCoroutines.ContainsKey(FadingObject))\n        {\n            StopCoroutine(RunningCoroutines[FadingObject]);\n            RunningCoroutines.Remove(FadingObject);\n        }\n    }\n\n    private void ClearHits()\n    {\n        System.Array.Clear(Hits, 0, Hits.Length);\n    }\n\n    private FadingObject GetFadingObjectFromHit(RaycastHit Hit)\n    {\n        return Hit.collider != null ? Hit.collider.GetComponent&lt;FadingObject&gt;() : null;\n    }\n\n}\n\n<\/pre>","protected":false},"excerpt":{"rendered":"<p>\u5148\u770b\u4e0b\u6548\u679c \u89c6\u9891\u6709\u538b\u7f29\uff0c\u6548\u679c\u6709\u70b9\u4e0d\u5bf9\uff0c\u4e0b\u9762\u662f\u6b63\u786e\u7684\u6548\u679c \u5148\u4e0a\u4e24\u6bb5\u4ee3\u7801 \u653e\u4e00\u4e2a\u81ea\u52a8\u6293\u53d6\u573a\u666f\u4e2d\u7684\u7269\u4f53\u7136\u540e\u518d\u5b9e\u73b0\u906e\u6321 &hellip; <a href=\"https:\/\/meecarlo.com\/old\/2023\/10\/12\/%e7%89%a9%e4%bd%93%e9%81%ae%e6%8c%a1%e5%89%94%e9%99%a4%e5%a4%84%e7%90%86\/\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">\u7269\u4f53\u906e\u6321\u5254\u9664\u5904\u7406<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":942,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-961","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-study-note"],"_links":{"self":[{"href":"https:\/\/meecarlo.com\/old\/wp-json\/wp\/v2\/posts\/961","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/meecarlo.com\/old\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/meecarlo.com\/old\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/meecarlo.com\/old\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/meecarlo.com\/old\/wp-json\/wp\/v2\/comments?post=961"}],"version-history":[{"count":2,"href":"https:\/\/meecarlo.com\/old\/wp-json\/wp\/v2\/posts\/961\/revisions"}],"predecessor-version":[{"id":966,"href":"https:\/\/meecarlo.com\/old\/wp-json\/wp\/v2\/posts\/961\/revisions\/966"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/meecarlo.com\/old\/wp-json\/wp\/v2\/media\/942"}],"wp:attachment":[{"href":"https:\/\/meecarlo.com\/old\/wp-json\/wp\/v2\/media?parent=961"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/meecarlo.com\/old\/wp-json\/wp\/v2\/categories?post=961"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/meecarlo.com\/old\/wp-json\/wp\/v2\/tags?post=961"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}