{"id":1102,"date":"2017-04-24T16:22:32","date_gmt":"2017-04-24T08:22:32","guid":{"rendered":"http:\/\/39.100.100.179\/?p=1102"},"modified":"2017-04-26T10:45:45","modified_gmt":"2017-04-26T02:45:45","slug":"%e5%ae%9e%e7%8e%b0%e7%ba%a2%e8%ad%a6%e3%80%81%e6%98%9f%e9%99%85%e7%9a%84%e6%a1%86%e9%80%89%e5%8a%9f%e8%83%bd","status":"publish","type":"post","link":"http:\/\/www.u3d8.com\/?p=1102","title":{"rendered":"\u5b9e\u73b0\u7c7b\u4f3c\u7ea2\u8b66\u548c\u661f\u9645\u4e89\u9738\u7684\u6846\u9009\u529f\u80fd"},"content":{"rendered":"<p>\u8fd9\u91cc\u6211\u4eec\u6765\u5b9e\u73b0\u7c7b\u4f3c\u7ea2\u8b66\u548c\u661f\u9645\u4e89\u9738\u7684\u6846\u9009\u529f\u80fd\uff0c\u5982\u4e0b\u56fe<\/p>\n<p><a href=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2017\/04\/QQ\u622a\u56fe20170425163638.png\" data-lightbox=\"image_lg\"><img title=\"\u5b9e\u73b0\u7c7b\u4f3c\u7ea2\u8b66\u548c\u661f\u9645\u4e89\u9738\u7684\u6846\u9009\u529f\u80fd - \u7b2c1\u5f20  | u3d8\u6280\u672f\u5206\u4eab\" alt=\"\u5b9e\u73b0\u7c7b\u4f3c\u7ea2\u8b66\u548c\u661f\u9645\u4e89\u9738\u7684\u6846\u9009\u529f\u80fd - \u7b2c1\u5f20  | u3d8\u6280\u672f\u5206\u4eab\"  loading=\"lazy\" class=\" wp-image-1133 alignleft\"  data-src=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2017\/04\/QQ\u622a\u56fe20170425163638.png\" width=\"565\" height=\"331\" srcset=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2017\/04\/QQ\u622a\u56fe20170425163638.png 627w, http:\/\/www.u3d8.com\/wp-content\/uploads\/2017\/04\/QQ\u622a\u56fe20170425163638-300x176.png 300w\" sizes=\"(max-width: 565px) 100vw, 565px\" \/><\/a><a href=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2017\/04\/DrawRect.gif\" data-lightbox=\"image_lg\"><img title=\"\u5b9e\u73b0\u7c7b\u4f3c\u7ea2\u8b66\u548c\u661f\u9645\u4e89\u9738\u7684\u6846\u9009\u529f\u80fd - \u7b2c2\u5f20  | u3d8\u6280\u672f\u5206\u4eab\" alt=\"\u5b9e\u73b0\u7c7b\u4f3c\u7ea2\u8b66\u548c\u661f\u9645\u4e89\u9738\u7684\u6846\u9009\u529f\u80fd - \u7b2c2\u5f20  | u3d8\u6280\u672f\u5206\u4eab\"  loading=\"lazy\" class=\"size-full wp-image-1123 alignnone\"  data-src=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2017\/04\/DrawRect.gif\" width=\"585\" height=\"330\" \/><\/a><\/p>\n<p>\u5b9e\u73b0\u753b\u7ebf<\/p>\n<pre class=\"lang:c# decode:true\">using UnityEngine;\r\n\r\npublic class DrawRect : MonoBehaviour {\r\n\r\n    bool drawing = false;\r\n    private Material rectMat;\r\n    private Color rectColor = Color.green;\r\n    private Vector2 startPosition = Vector2.zero;\r\n    private Vector2 endPosition = Vector2.zero;\r\n\r\n    void Start()\r\n    {\r\n        rectMat = new Material( Shader.Find( \"Lines\/Colored_Blended\" ) );\r\n    }\r\n\r\n    void Update()\r\n    {\r\n        if (Input.GetMouseButtonDown(0))\r\n        {\r\n            drawing = true;\r\n            startPosition = Input.mousePosition;    \/\/ \u8bbe\u7f6e\u5f00\u59cb\u4f4d\u7f6e\r\n            CubeManager.Instance.BeginDraw();\r\n        }\r\n\r\n        else if ( Input.GetMouseButtonUp( 0 ) )\r\n        {\r\n            drawing = false;\r\n            CubeManager.Instance.EndDraw();\r\n        }\r\n    }\r\n\r\n    void OnPostRender()     \/\/ \u8be5\u65b9\u6cd5\u4e3a\u7cfb\u7edf\u51fd\u6570\uff0c\u9700\u5c06\u6b64\u811a\u672c\u6302\u8f7d\u5230Camera\u4e0b\u624d\u80fd\u6267\u884c\u3002\r\n    {\r\n        if ( drawing )\r\n        {\r\n            GL.PushMatrix();\r\n\r\n            if ( !rectMat )\r\n                return;\r\n\r\n            endPosition = Input.mousePosition;      \/\/ \u8bbe\u7f6e\u7ed3\u675f\u4f4d\u7f6e\r\n            CubeManager.Instance.Drawing( startPosition, endPosition );\r\n\r\n            rectMat.SetPass( 0 );\r\n            GL.LoadPixelMatrix();\r\n            GL.Begin( GL.QUADS );\r\n            GL.Color( new Color( rectColor.r, rectColor.g, rectColor.b, 0.1f ) );\r\n            GL.Vertex3( startPosition.x, startPosition.y, 0 );\r\n            GL.Vertex3( endPosition.x, startPosition.y, 0 );\r\n            GL.Vertex3( endPosition.x, endPosition.y, 0 );\r\n            GL.Vertex3( startPosition.x, endPosition.y, 0 );\r\n            GL.End();\r\n            GL.Begin( GL.LINES );\r\n            GL.Color( rectColor );\r\n            GL.Vertex3( startPosition.x, startPosition.y, 0 );\r\n            GL.Vertex3( endPosition.x, startPosition.y, 0 );\r\n            GL.Vertex3( endPosition.x, startPosition.y, 0 );\r\n            GL.Vertex3( endPosition.x, endPosition.y, 0 );\r\n            GL.Vertex3( endPosition.x, endPosition.y, 0 );\r\n            GL.Vertex3( startPosition.x, endPosition.y, 0 );\r\n            GL.Vertex3( startPosition.x, endPosition.y, 0 );\r\n            GL.Vertex3( startPosition.x, startPosition.y, 0 );\r\n            GL.End();\r\n            GL.PopMatrix();\r\n        }\r\n    }\r\n\r\n}\r\n<\/pre>\n<p>\u751f\u6210\u7269\u4f53\uff0c\u5b9e\u73b0\u6846\u9009<\/p>\n<pre class=\"lang:c# decode:true\">using UnityEngine;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\npublic class CubeManager : MonoBehaviour {\r\n    private static CubeManager instance;\r\n    public static CubeManager Instance\r\n    {\r\n        get\r\n        {\r\n            return instance;\r\n        }\r\n    }\r\n\r\n\r\n    public GameObject prefab;\r\n    public int count = 10;\r\n\r\n    private Material originMat;\r\n    private Material outlineMat;\r\n\r\n    private List&lt;MeshRenderer&gt; meshRendererList;\r\n\r\n    void Awake()\r\n    {\r\n        instance = this;\r\n    }\r\n\r\n\t\/\/ Use this for initialization\r\n    void Start () {\r\n        meshRendererList = new List&lt;MeshRenderer&gt;();\r\n\r\n        \/\/ \u521b\u5efa\u7269\u4f53\r\n        for ( int i = 0; i &lt; count; i++ )\r\n\t    {\r\n            GameObject go = GameObject.Instantiate( prefab ) as GameObject;\r\n            go.name = (i + 1).ToString();\r\n            go.transform.parent = transform;\r\n            go.transform.position = new Vector3( Random.Range( -6, 7 ), 0, Random.Range( -4, 5 ) );\r\n            meshRendererList.Add( go.GetComponent&lt;MeshRenderer&gt;() );\r\n\t    }\r\n\r\n        originMat = meshRendererList[0].material;\r\n\r\n        \/\/ \u83b7\u53d6\u63cf\u8fb9shader\r\n        outlineMat = new Material( Shader.Find( \"Outlined\/Diffuse\" ) );\r\n        outlineMat.color = originMat.color;\r\n        outlineMat.SetColor( \"Outline Color\", Color.green );\r\n\r\n    }\r\n\r\n    public void BeginDraw()\r\n    {\r\n        var item = meshRendererList.GetEnumerator();\r\n        while ( item.MoveNext() )\r\n        {\r\n            item.Current.material = originMat;\r\n        }\r\n    }\r\n\r\n    public void Drawing( Vector2 point1, Vector2 point2 )\r\n    {\r\n        Vector3 p1 = Vector3.zero;\r\n        Vector3 p2 = Vector3.zero;\r\n\r\n        if ( point1.x &gt; point2.x )\r\n        {\r\n            p1.x = point2.x;\r\n            p2.x = point1.x;\r\n        }\r\n        else\r\n        {\r\n            p1.x = point1.x;\r\n            p2.x = point2.x;\r\n        }\r\n        if ( point1.y &gt; point2.y )\r\n        {\r\n            p1.y = point2.y;\r\n            p2.y = point1.y;\r\n        }\r\n        else\r\n        {\r\n            p1.y = point1.y;\r\n            p2.y = point2.y;\r\n        }\r\n\r\n        var item = meshRendererList.GetEnumerator();\r\n        while ( item.MoveNext() )\r\n        {\r\n            Vector3 position = Camera.main.WorldToScreenPoint( item.Current.transform.position );\r\n            if ( position.x &gt; p1.x &amp;&amp; position.y &gt; p1.y \r\n                &amp;&amp; position.x &lt; p2.x &amp;&amp; position.y &lt; p2.y )\r\n            {\r\n                item.Current.material = outlineMat;\r\n            }\r\n            else\r\n            {\r\n                item.Current.material = originMat;\r\n            }\r\n        }\r\n    }\r\n\r\n    public void EndDraw()\r\n    {\r\n\r\n    }\r\n\r\n\r\n}\r\n<\/pre>\n<p>\u9879\u76ee\u4f7f\u7528\u7248\u672c\uff1aUnity5.3.6 \u00a0 \u00a0GitHub\u4e0b\u8f7d\u5730\u5740\uff1a<\/p>\n<p><a href=\"https:\/\/github.com\/654306663\/BoxSelect\">https:\/\/github.com\/654306663\/BoxSelect<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u91cc\u6211\u4eec\u6765\u5b9e\u73b0\u7c7b\u4f3c\u7ea2\u8b66\u548c\u661f\u9645\u4e89\u9738\u7684\u6846\u9009\u529f\u80fd\uff0c\u5982\u4e0b\u56fe \u5b9e\u73b0\u753b\u7ebf using Uni &hellip; <a href=\"http:\/\/www.u3d8.com\/?p=1102\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[23],"tags":[249,247,248,246],"_links":{"self":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/1102"}],"collection":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1102"}],"version-history":[{"count":26,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/1102\/revisions"}],"predecessor-version":[{"id":1143,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/1102\/revisions\/1143"}],"wp:attachment":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1102"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}