{"id":1385,"date":"2015-07-27T23:30:02","date_gmt":"2015-07-27T15:30:02","guid":{"rendered":"http:\/\/www.clonefactor.com\/wordpress\/?p=1385"},"modified":"2015-07-27T23:30:02","modified_gmt":"2015-07-27T15:30:02","slug":"rotate-relative-to-camera-position","status":"publish","type":"post","link":"https:\/\/www.clonefactor.com\/wordpress\/program\/c\/1385\/","title":{"rendered":"Rotate relative to camera position."},"content":{"rendered":"<p>\u7269\u4ef6\u4ee5\u76f8\u5c0d\u73fe\u5728\u89d2\u5ea6\u7684\u65b9\u5f0f Rotate, X \u8ef8 \u53ca Y \u8ef8<\/p>\n<pre class=\"brush:csharp\">#define CalculateAngle  \r\n\/\/ Calculate the angle relative to camera viewport  \r\nusing UnityEngine;  \r\nusing System.Collections;  \r\n  \r\npublic class RotateCube : MonoBehaviour  \r\n{  \r\n    public float speed = 10f;  \r\n    public bool flipX = false, flipY = false;  \r\n    private Vector3 lastPosition;  \r\n#if CalculateAngle  \r\n    public Camera camera;  \r\n    void Awake()  \r\n    {  \r\n        camera = (camera == null) ? Camera.main : camera;  \r\n    }  \r\n#endif  \r\n  \r\n    void OnMouseDown()  \r\n    {  \r\n        lastPosition = Input.mousePosition;  \r\n    }  \r\n    void OnMouseDrag()  \r\n    {  \r\n        Vector3 diff = -speed * Time.deltaTime * (Input.mousePosition - lastPosition);  \r\n        diff = new Vector3((flipY?diff.y:-diff.y),(flipX?diff.x:-diff.x), 0f);  \r\n#if !CalculateAngle  \r\n        transform.Rotate(diff, Space.World);  \r\n#else  \r\n        Vector3 objUp = transform.InverseTransformDirection(camera.transform.TransformDirection(Vector3.up));  \r\n        Vector3 objRight = transform.InverseTransformDirection(camera.transform.TransformDirection(Vector3.right));  \r\n        transform.rotation *= Quaternion.AngleAxis(diff.y, objUp) * Quaternion.AngleAxis(diff.x, objRight);  \r\n#endif  \r\n        lastPosition = Input.mousePosition;  \r\n    }  \r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u7269\u4ef6\u4ee5\u76f8\u5c0d\u73fe\u5728\u89d2\u5ea6\u7684\u65b9\u5f0f Rotate, X \u8ef8 \u53ca Y \u8ef8 #define CalculateAn &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,11],"tags":[17,74,75,43],"class_list":["post-1385","post","type-post","status-publish","format-standard","hentry","category-c","category-unity3d","tag-camera","tag-quaternion","tag-relative","tag-unity3d-2"],"_links":{"self":[{"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/posts\/1385","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/comments?post=1385"}],"version-history":[{"count":0,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/posts\/1385\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/media?parent=1385"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/categories?post=1385"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.clonefactor.com\/wordpress\/wp-json\/wp\/v2\/tags?post=1385"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}