{"id":2251,"date":"2021-05-17T09:21:00","date_gmt":"2021-05-17T01:21:00","guid":{"rendered":"http:\/\/www.u3d8.com\/?p=2251"},"modified":"2021-05-18T19:24:27","modified_gmt":"2021-05-18T11:24:27","slug":"unity%e4%b9%8blts%e7%b1%bb%e6%b8%b8%e6%88%8f%e7%9b%b8%e6%9c%ba%e6%8e%a7%e5%88%b6","status":"publish","type":"post","link":"http:\/\/www.u3d8.com\/?p=2251","title":{"rendered":"Unity\u4e4bRTS\u7c7b\u6e38\u620f\u76f8\u673a\u63a7\u5236"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><a href=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2021\/05\/slgfinger.gif\" data-lightbox=\"image_lg\"><img title=\"Unity\u4e4bRTS\u7c7b\u6e38\u620f\u76f8\u673a\u63a7\u5236 - \u7b2c1\u5f20  | u3d8\u6280\u672f\u5206\u4eab\" alt=\"Unity\u4e4bRTS\u7c7b\u6e38\u620f\u76f8\u673a\u63a7\u5236 - \u7b2c1\u5f20  | u3d8\u6280\u672f\u5206\u4eab\"  loading=\"lazy\" width=\"666\" height=\"376\"  data-src=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2021\/05\/slgfinger.gif\" alt=\"\" class=\"wp-image-2252\"\/><\/a><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>using System.Collections;\nusing System.Collections.Generic;\nusing UnityEngine;\n\npublic class CameraController : MonoBehaviour\n{\n\n    private float cameraMoveLerpTime = 8f;\n    private float cameraRotateLerpTime = 8f;\n    private Vector3 cameraPositionTemp;\n\n    \/\/ Start is called before the first frame update\n    void Start()\n    {\n        cameraPositionTemp = transform.position;\n    }\n\n    \/\/ Update is called once per frame\n    void Update()\n    {\n        Move();\n        Zoom();\n\n        cameraPositionTemp = new Vector3(Mathf.Clamp(cameraPositionTemp.x, moveLimitX&#91;0], moveLimitX&#91;1])\n        , Mathf.Clamp(cameraPositionTemp.y, zoomMinPositionY, zoomMaxPositionY)\n        , Mathf.Clamp(cameraPositionTemp.z, moveLimitZ&#91;0], moveLimitZ&#91;1]));\n        float rotateX = (cameraPositionTemp.y - zoomMinPositionY) \/ (zoomMaxPositionY - zoomMinPositionY)\n        * (zoomMaxRotateX - zoomMinRotateX) + zoomMinRotateX;\n        transform.position = Vector3.Lerp(transform.position, cameraPositionTemp, cameraMoveLerpTime * Time.deltaTime);\n        transform.eulerAngles = Vector3.Lerp(transform.eulerAngles, new Vector3(rotateX, 0, 0), cameraRotateLerpTime * Time.deltaTime);\n    }\n\n\n\n    &#91;SerializeField] private Vector2 moveLimitX = new Vector2(-200, 200);\n    &#91;SerializeField] private Vector2 moveLimitZ = new Vector2(-200, 200);\n    private float moveCo = 0.1f;\n    private Vector3 oldMousePos;\n    private void Move()\n    {\n#if !UNITY_EDITOR       \n        if (Input.touchCount != 1) {\n            return;\n        }\n\n        Touch touch1 = Input.GetTouch (0);\n        if (touch1.phase == TouchPhase.Moved) {\n            Vector3 delta = touch1.deltaPosition * moveCo;\n\n            cameraPositionTemp -= new Vector3(delta.x, 0, delta.y);\n        }\n#else\n        if (Input.GetMouseButtonDown(0))\n        {\n            oldMousePos = Input.mousePosition;\n        }\n\n        if (Input.GetMouseButton(0))\n        {\n            Vector3 deltaPosition = Input.mousePosition - oldMousePos;\n            Vector3 delta = new Vector2(deltaPosition.x, deltaPosition.y) * moveCo;\n\n            cameraPositionTemp -= new Vector3(delta.x, 0, delta.y);\n            oldMousePos = Input.mousePosition;\n        }\n#endif\n    }\n\n    &#91;SerializeField] private float zoomMaxPositionY = 60;\n    &#91;SerializeField] private float zoomMinPositionY = 10;\n    &#91;SerializeField] private float zoomMaxRotateX = 70;\n    &#91;SerializeField] private float zoomMinRotateX = 50;\n    Touch oldTouch1; \/\/\u4e0a\u6b21\u89e6\u6478\u70b91(\u624b\u63071)\n    Touch oldTouch2; \/\/\u4e0a\u6b21\u89e6\u6478\u70b92(\u624b\u63072)\n    private float zoomScaleCo = 0.3f; \/\/\u7f29\u653e\u7cfb\u6570\n    private void Zoom()\n    {\n#if !UNITY_EDITOR\n        if (Input.touchCount &lt;= 1) {\n            return;\n        }\n\n        Touch touch1 = Input.GetTouch (0);\n        Touch touch2 = Input.GetTouch (1);\n        if (touch2.phase == TouchPhase.Began) {\n            oldTouch2 = touch2;\n            oldTouch1 = touch1;\n            return;\n        }\n        if (touch1.phase == TouchPhase.Moved || touch2.phase == TouchPhase.Moved) {\n            float oldDistance = Vector2.Distance (oldTouch2.position, oldTouch1.position);\n            float curDistance = Vector2.Distance (touch2.position, touch1.position);\n            float delta = (curDistance - oldDistance) * zoomScaleCo;\n            cameraPositionTemp -= new Vector3(0, delta, 0);\n\n            oldTouch1 = touch1;\n            oldTouch2 = touch2;\n        }\n#else\n        cameraPositionTemp -= new Vector3(0, Input.mouseScrollDelta.y * 10f * zoomScaleCo, 0);\n#endif\n    }\n}\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[23],"tags":[409],"_links":{"self":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/2251"}],"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=2251"}],"version-history":[{"count":2,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/2251\/revisions"}],"predecessor-version":[{"id":2256,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/2251\/revisions\/2256"}],"wp:attachment":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2251"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}