{"id":2253,"date":"2016-09-03T13:26:06","date_gmt":"2016-09-03T11:26:06","guid":{"rendered":"http:\/\/www.unicoda.com\/?p=2253"},"modified":"2016-09-03T13:26:06","modified_gmt":"2016-09-03T11:26:06","slug":"unity3d-gestion-des-bords-de-lecran","status":"publish","type":"post","link":"https:\/\/www.unicoda.com\/?p=2253","title":{"rendered":"Unity3D : gestion des bords de l&rsquo;\u00e9cran"},"content":{"rendered":"<h4>D\u00e9finition du probl\u00e8me<\/h4>\n<p>J&rsquo;ai pass\u00e9 quelques temps \u00e0 comprendre comment g\u00e9rer la d\u00e9tection des bords de l&rsquo;\u00e9cran pour ne pas que mon gameobject en sorte.<\/p>\n<p>Dans mon cas le gameobject dirig\u00e9 par le joueur est un cube auquel on ajoute un BoxCollider, la cam\u00e9ra est fixe.<\/p>\n<p>Dans Unity on g\u00e8re la position d&rsquo;un objet par son attribut position (un Vector3 donnant le positionnement du centre de l&rsquo;objet).<\/p>\n<p>Malheureusement pour moi le composant camera de Unity permet seulement de trouver la taille en pixels de l&rsquo;\u00e9cran (maCamera.pixelHeight et maCamera.pixelWidth) et donc je me suis mis \u00e0 chercher un moyen de d\u00e9terminer en pixel l&rsquo;endroit o\u00f9 se trouve mon cube afin de savoir si celui-ci est en dehors ou en dedans de l&rsquo;\u00e9cran. En gros si mon cube est enti\u00e8rement visible ou non !<\/p>\n<h4>De l\u2019int\u00e9r\u00eat d&rsquo;utiliser un BoxCollider<\/h4>\n<p>Pour d\u00e9terminer le centre de mon cube ainsi que sa taille j&rsquo;utilise les valeurs r\u00e9cup\u00e9rables dans l\u2019attribut bounds du composant :<\/p>\n<pre><span style=\"font-family: Consolas;\"><span style=\"color: #333333;\">\/\/dans start()<\/span>\r\n<span style=\"color: #333333;\">joueurX<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">=<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #009695;\">this<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">GetComponent<\/span><span style=\"color: #333333;\">&lt;<\/span><span style=\"color: #3364a4;\">Collider<\/span><span style=\"color: #333333;\">&gt;()<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">bounds<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">size<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">x<\/span><span style=\"color: #333333;\">\/<\/span><span style=\"color: #f57d00;\">2<\/span><span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #333333;\">joueurY<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">=<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #009695;\">this<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">GetComponent<\/span><span style=\"color: #333333;\">&lt;<\/span><span style=\"color: #3364a4;\">Collider<\/span><span style=\"color: #333333;\">&gt;()<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">bounds<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">size<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">y<\/span><span style=\"color: #333333;\">\/<\/span><span style=\"color: #f57d00;\">2<\/span><span style=\"color: #333333;\">;\r\n\r\n\/\/dans update() <span style=\"font-family: Consolas;\"> centreJoueurX\u00a0=\u00a0<span style=\"color: #009695;\">this<\/span>.GetComponent&lt;<span style=\"color: #3364a4;\">Collider<\/span>&gt;\u00a0().bounds.center.x; centreJoueurY\u00a0=\u00a0<span style=\"color: #009695;\">this<\/span>.GetComponent&lt;<span style=\"color: #3364a4;\">Collider<\/span>&gt; ().bounds.center.y;<\/span> \r\n<\/span><\/span><\/pre>\n<h4>Aux tests \u00e0 effectuer<\/h4>\n<pre><span style=\"font-family: Consolas;\"><span style=\"color: #009695;\">if<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #3364a4;\">maC<\/span><span style=\"color: #333333;\">amera<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">WorldToScreenPoint(<\/span><span style=\"color: #009695;\">new<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #3364a4;\">Vector3<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #f57d00;\">0<\/span><span style=\"color: #333333;\">,<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #333333;\">centreJoueurY<\/span><span style=\"color: #333333;\">+<\/span><span style=\"color: #333333;\">joueurY<\/span><span style=\"color: #333333;\">)<\/span><span style=\"color: #333333;\">,<\/span><span style=\"color: #f57d00;\">0<\/span><span style=\"color: #333333;\">))<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">y<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">&gt;<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">pixelHeight<\/span><span style=\"color: #333333;\">)<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">{<\/span>\r\n\/\/on stop le d\u00e9placement\r\n<span style=\"color: #333333;\">directionJoueur<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">=<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #f57d00;\">0<\/span><span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #009695;\">this<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">gameObject<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">transform<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">localPosition<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">+=<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #333333;\">-<\/span><span style=\"color: #333333;\">mouvementY<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">*<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">speed<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">*<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #3364a4;\">Time<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">deltaTime<\/span><span style=\"color: #333333;\">)<\/span><span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #333333;\">}<\/span><span style=\"color: #333333;\">\u00a0<\/span>\r\n<span style=\"color: #009695;\">else<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #009695;\">if<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #3364a4;\">maC<\/span><span style=\"color: #333333;\">amera<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">WorldToScreenPoint<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #009695;\">new<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #3364a4;\">Vector3<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #f57d00;\">0<\/span><span style=\"color: #333333;\">,<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #333333;\">centreJoueurY<\/span><span style=\"color: #333333;\">-<\/span><span style=\"color: #333333;\">joueurY<\/span><span style=\"color: #333333;\">)<\/span><span style=\"color: #333333;\">,<\/span><span style=\"color: #f57d00;\">0<\/span><span style=\"color: #333333;\">))<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">y<\/span><span style=\"color: #333333;\">\u00a0\u00a0<\/span><span style=\"color: #333333;\">&lt;<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #f57d00;\">0<\/span><span style=\"color: #333333;\">)<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">{<\/span>\r\n<span style=\"color: #333333;\">directionJoueur<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">=<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #f57d00;\">0<\/span><span style=\"color: #333333;\">;<\/span><span style=\"color: #333333;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span style=\"color: #009695;\">   this<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">gameObject<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">transform<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">localPosition<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">+=<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #333333;\">mouvementY<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">*<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">speed<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">*<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #3364a4;\">Time<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">deltaTime<\/span><span style=\"color: #333333;\">)<\/span><span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #333333;\">}<\/span><span style=\"color: #333333;\">\u00a0<\/span>\r\n<span style=\"color: #009695;\">else<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #009695;\">if<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #3364a4;\">maC<\/span><span style=\"color: #333333;\">amera<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">WorldToScreenPoint<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #009695;\">new<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #3364a4;\">Vector3<\/span><span style=\"color: #333333;\">((<\/span><span style=\"color: #333333;\">centreJoueurX<\/span><span style=\"color: #333333;\">+<\/span><span style=\"color: #333333;\">joueurX<\/span><span style=\"color: #333333;\">)<\/span><span style=\"color: #333333;\">,<\/span><span style=\"color: #f57d00;\">0<\/span><span style=\"color: #333333;\">,<\/span><span style=\"color: #f57d00;\">0<\/span><span style=\"color: #333333;\">))<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">x<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">&gt;<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">pixelWidth<\/span><span style=\"color: #333333;\">)<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">{<\/span>\r\n<span style=\"color: #333333;\">directionJoueur<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">=<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #f57d00;\">0<\/span><span style=\"color: #333333;\">;<\/span><span style=\"color: #333333;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span style=\"color: #009695;\">   this<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">gameObject<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">transform<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">localPosition<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">+=<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #333333;\">-<\/span><span style=\"color: #333333;\">mouvementX<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">*<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">speed<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">*<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #3364a4;\">Time<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">deltaTime<\/span><span style=\"color: #333333;\">)<\/span><span style=\"color: #333333;\">;<\/span>\r\n<span style=\"color: #333333;\">}<\/span>\r\n<span style=\"color: #009695;\">else<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #009695;\">if<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #3364a4;\">maC<\/span><span style=\"color: #333333;\">amera<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">WorldToScreenPoint<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #009695;\">new<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #3364a4;\">Vector3<\/span><span style=\"color: #333333;\">((<\/span><span style=\"color: #333333;\">centreJoueurX<\/span><span style=\"color: #333333;\">-<\/span><span style=\"color: #333333;\">joueurX<\/span><span style=\"color: #333333;\">)<\/span><span style=\"color: #333333;\">,<\/span><span style=\"color: #f57d00;\">0<\/span><span style=\"color: #333333;\">,<\/span><span style=\"color: #f57d00;\">0<\/span><span style=\"color: #333333;\">))<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">x<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">&lt;<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #f57d00;\">0<\/span><span style=\"color: #333333;\">)<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">{<\/span>\r\n<span style=\"color: #333333;\">directionJoueur<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">=<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #f57d00;\">0<\/span><span style=\"color: #333333;\">;<\/span>                                        <span style=\"color: #009695;\">   this<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">gameObject<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">transform<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">localPosition<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">+=<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #333333;\">mouvementX<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">*<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">speed<\/span><span style=\"color: #333333;\">\u00a0 <\/span><span style=\"color: #333333;\">*<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #3364a4;\">Time<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">deltaTime<\/span><span style=\"color: #333333;\">)<\/span><span style=\"color: #333333;\">;\r\n}\r\n\r\n\r\n<\/span><\/span><\/pre>\n<p>Voil\u00e0 pour le syst\u00e8me utilis\u00e9 actuellement, on peut bien entendu imaginer un syst\u00e8me pour ne pas refaire les tests \u00e0 chaque update() mais uniquement au moment voulu.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>D\u00e9finition du probl\u00e8me J&rsquo;ai pass\u00e9 quelques temps \u00e0 comprendre comment g\u00e9rer la d\u00e9tection des bords de l&rsquo;\u00e9cran pour ne pas que mon gameobject en sorte. Dans mon cas le gameobject dirig\u00e9 par le joueur est un cube auquel on ajoute un BoxCollider, la cam\u00e9ra est fixe. Dans Unity on g\u00e8re la position d&rsquo;un objet par &hellip; <a href=\"https:\/\/www.unicoda.com\/?p=2253\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;Unity3D : gestion des bords de l&rsquo;\u00e9cran&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[289],"tags":[],"class_list":["post-2253","post","type-post","status-publish","format-standard","hentry","category-unity3d"],"_links":{"self":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/2253","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2253"}],"version-history":[{"count":2,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/2253\/revisions"}],"predecessor-version":[{"id":2255,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/2253\/revisions\/2255"}],"wp:attachment":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2253"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2253"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2253"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}