{"id":4706,"date":"2014-09-22T11:36:00","date_gmt":"2014-09-22T10:36:00","guid":{"rendered":"http:\/\/www.keris-studio.fr\/blog\/?p=4706"},"modified":"2014-11-29T14:39:37","modified_gmt":"2014-11-29T13:39:37","slug":"unity-3d-cliquer-pour-observer","status":"publish","type":"post","link":"https:\/\/www.keris-studio.fr\/blog\/?p=4706","title":{"rendered":"Unity 3D &#8211; Cliquer pour observer"},"content":{"rendered":"<p align=\"justify\"><a href=\"https:\/\/www.keris-studio.fr\/blog\/wp-content\/clip_image00218.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"clip_image002\" src=\"https:\/\/www.keris-studio.fr\/blog\/wp-content\/clip_image002_thumb18.jpg\" alt=\"clip_image002\" width=\"605\" height=\"316\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Dans les logiciels 3D, le bouton gauche est enfonc\u00e9 pour observer. Pour d\u00e9clencher une action, il faut lib\u00e9rer le bouton, positionner la souris au niveau de la zone sensible et cliquer. Ces actions, devenue naturelles, n\u2019existent pas en standard dans Unity de fait de l\u2019h\u00e9ritage \u00ab jeux vid\u00e9o \u00bb. Il faudra d\u00e8s lors ajouter un script qui modifiera l\u2019ergonomie de base du logiciel.<\/p>\n<p align=\"justify\"><!--more--><\/p>\n<p align=\"justify\"><a href=\"https:\/\/www.keris-studio.fr\/blog\/wp-content\/clip_image00414.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"clip_image004\" src=\"https:\/\/www.keris-studio.fr\/blog\/wp-content\/clip_image004_thumb14.jpg\" alt=\"clip_image004\" width=\"604\" height=\"319\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Le script va s\u2019appliquer sur l\u2019objet \u00ab first person controller \u00bb. Cet objet est compos\u00e9 de la capsule d\u00e9crivant l\u2019encombrement du personnagle et de la cam\u00e9ra (Main Camera) restituant le point de vue. L\u2019ensemble est combin\u00e9 dans un objet parent le \u00ab First Person Controller \u00bb.<\/p>\n<p align=\"justify\"><a href=\"https:\/\/www.keris-studio.fr\/blog\/wp-content\/clip_image0051.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"clip_image005\" src=\"https:\/\/www.keris-studio.fr\/blog\/wp-content\/clip_image005_thumb1.png\" alt=\"clip_image005\" width=\"220\" height=\"50\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Le script va s\u2019appliquer \u00e0 deux niveaux diff\u00e9rents : le niveau First Person Controller pour la gestion des axes X et dans le Main Camera pour la gestion des axes Y<\/p>\n<p align=\"justify\">Cr\u00e9er un script <strong><span style=\"color: #0000ff;\">C#<\/span><\/strong> et dans Monodevelop copier ci-dessous.<\/p>\n<p align=\"justify\">Le script est le suivant :<\/p>\n<pre lang=\"languagestring\">\r\n\r\nusing UnityEngine;\r\n\r\nusing System.Collections;\r\n\r\n\/\/\/ MouseLook rotates the transform based on the mouse delta.\r\n\r\n\/\/\/ Minimum and Maximum values can be used to constrain the possible rotation\r\n\r\n\/\/\/ To make an FPS style character:\r\n\r\n\/\/\/ - Create a capsule.\r\n\r\n\/\/\/ - Add a rigid body to the capsule\r\n\r\n\/\/\/ - Add the MouseLook script to the capsule.\r\n\r\n\/\/\/ -&gt; Set the mouse look to use LookX. (You want to only turn character but not tilt it)\r\n\r\n\/\/\/ - Add FPSWalker script to the capsule\r\n\r\n\/\/\/ - Create a camera. Make the camera a child of the capsule. Reset it's transform.\r\n\r\n\/\/\/ - Add a MouseLook script to the camera.\r\n\r\n\/\/\/ -&gt; Set the mouse look to use LookY. (You want the camera to tilt up and down like a head. The character already turns.)\r\n\r\n[AddComponentMenu(\"Camera-Control\/Mouse Look\")]\r\n\r\npublic class MouseLookClick : MonoBehaviour {\r\n\r\npublic enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }\r\n\r\npublic RotationAxes axes = RotationAxes.MouseXAndY;\r\n\r\npublic float sensitivityX = 15F;\r\n\r\npublic float sensitivityY = 15F;\r\n\r\npublic float minimumX = -360F;\r\n\r\npublic float maximumX = 360F;\r\n\r\npublic float minimumY = -60F;\r\n\r\npublic float maximumY = 60F;\r\n\r\nfloat rotationX = 0F;\r\n\r\nfloat rotationY = 0F;\r\n\r\nQuaternion originalRotation;\r\n\r\nvoid Update ()\r\n\r\n{\r\n\r\nif (axes == RotationAxes.MouseXAndY)\r\n\r\n{\r\n\r\nif(Input.GetMouseButton(0))\r\n\r\n{\r\n\r\n\/\/ Read the mouse input axis\r\n\r\nrotationX += Input.GetAxis(\"Mouse X\") * sensitivityX;\r\n\r\nrotationY += Input.GetAxis(\"Mouse Y\") * sensitivityY;\r\n\r\nrotationX = ClampAngle (rotationX, minimumX, maximumX);\r\n\r\nrotationY = ClampAngle (rotationY, minimumY, maximumY);\r\n\r\nQuaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);\r\n\r\nQuaternion yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left);\r\n\r\ntransform.localRotation = originalRotation * xQuaternion * yQuaternion;\r\n\r\n}\r\n\r\n}\r\n\r\nelse if (axes == RotationAxes.MouseX)\r\n\r\n{\r\n\r\nif(Input.GetMouseButton(0))\r\n\r\n{\r\n\r\nrotationX += Input.GetAxis(\"Mouse X\") * sensitivityX;\r\n\r\nrotationX = ClampAngle (rotationX, minimumX, maximumX);\r\n\r\nQuaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);\r\n\r\ntransform.localRotation = originalRotation * xQuaternion;\r\n\r\n}\r\n\r\n}\r\n\r\nelse\r\n\r\n{\r\n\r\nif(Input.GetMouseButton(0))\r\n\r\n{\r\n\r\nrotationY += Input.GetAxis(\"Mouse Y\") * sensitivityY;\r\n\r\nrotationY = ClampAngle (rotationY, minimumY, maximumY);\r\n\r\nQuaternion yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left);\r\n\r\ntransform.localRotation = originalRotation * yQuaternion;\r\n\r\n}\r\n\r\n}\r\n\r\n}\r\n\r\nvoid Start ()\r\n\r\n{\r\n\r\n\/\/ Make the rigid body not change rotation\r\n\r\nif (rigidbody)\r\n\r\nrigidbody.freezeRotation = true;\r\n\r\noriginalRotation = transform.localRotation;\r\n\r\n}\r\n\r\npublic static float ClampAngle (float angle, float min, float max)\r\n\r\n{\r\n\r\nif (angle &lt; -360F)\r\n\r\nangle += 360F;\r\n\r\nif (angle &gt; 360F)\r\n\r\nangle -= 360F;\r\n\r\nreturn Mathf.Clamp (angle, min, max);\r\n\r\n}\r\n\r\n}\r\n\/\/\/\r\n<\/pre>\n<p align=\"justify\">Dans le <span style=\"text-decoration: underline;\">First Person Controller<\/span>, il faut ajouter le script, les r\u00e9glages suivants peuvent \u00eatre appliqu\u00e9s. <span style=\"text-decoration: underline;\">Il faut surtout penser \u00e0 choisir l\u2019axe X<\/span><\/p>\n<p align=\"justify\"><a href=\"https:\/\/www.keris-studio.fr\/blog\/wp-content\/clip_image006.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"clip_image006\" src=\"https:\/\/www.keris-studio.fr\/blog\/wp-content\/clip_image006_thumb.png\" alt=\"clip_image006\" width=\"500\" height=\"180\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Dans le <span style=\"text-decoration: underline;\">Main Camera<\/span>, le m\u00eame script est appliqu\u00e9 mais cette fois selon <span style=\"text-decoration: underline;\">l\u2019axe Y<\/span>.<\/p>\n<p align=\"justify\"><a href=\"https:\/\/www.keris-studio.fr\/blog\/wp-content\/clip_image0072.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"clip_image007\" src=\"https:\/\/www.keris-studio.fr\/blog\/wp-content\/clip_image007_thumb2.png\" alt=\"clip_image007\" width=\"498\" height=\"169\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Il faut bien prendre garde de d\u00e9sactiver pour effacer le script MouseLook, afin de ne pas g\u00e9n\u00e9rer de conflits.<\/p>\n<p align=\"justify\"><a href=\"https:\/\/www.keris-studio.fr\/blog\/wp-content\/clip_image008.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"clip_image008\" src=\"https:\/\/www.keris-studio.fr\/blog\/wp-content\/clip_image008_thumb.png\" alt=\"clip_image008\" width=\"500\" height=\"185\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Il ne reste plus qu\u2019\u00e0 tester.<\/p>\n<p align=\"justify\"><a href=\"https:\/\/www.keris-studio.fr\/blog\/wp-content\/clip_image01014.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"clip_image010\" src=\"https:\/\/www.keris-studio.fr\/blog\/wp-content\/clip_image010_thumb13.jpg\" alt=\"clip_image010\" width=\"605\" height=\"296\" border=\"0\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans les logiciels 3D, le bouton gauche est enfonc\u00e9 pour observer. Pour d\u00e9clencher une action, il faut lib\u00e9rer le bouton, positionner la souris au niveau de la zone sensible et cliquer. Ces actions, devenue naturelles, n\u2019existent pas en standard dans Unity de fait de l\u2019h\u00e9ritage \u00ab jeux vid\u00e9o \u00bb. Il faudra d\u00e8s lors ajouter un &hellip; <a href=\"https:\/\/www.keris-studio.fr\/blog\/?p=4706\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Unity 3D &#8211; Cliquer pour observer<\/span>  <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,8,205],"tags":[140],"class_list":["post-4706","post","type-post","status-publish","format-standard","hentry","category-3d","category-methodologie","category-unity-2","tag-unity"],"_links":{"self":[{"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4706","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4706"}],"version-history":[{"count":7,"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4706\/revisions"}],"predecessor-version":[{"id":6591,"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4706\/revisions\/6591"}],"wp:attachment":[{"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4706"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4706"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4706"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}