ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2020ǯ09·î20Æü(Æü) 13:22:18ÍúÎò
¥Î¥Ã¥¯¥Ð¥Ã¥¯¡¡Æ°²è
https://gyazo.com/729f0ee19bf3e781f4cf433dd1b107e8
¡¡¿·¤·¤¯³Ø½¬¤¹¤ëÆâÍƤˤʤê¤Þ¤¹¡£
¡¦2ÅÀ´Ö¤Î°ÌÃÖ¾ðÊ󤫤éµ÷Î¥¤ÈÊý¸þ¤ò»»½Ð¤¹¤ë ¡¦Vector3.normalized¡ÊÀµµ¬²½½èÍý¡£Â®Å٥٥¯¥È¥ë¤ò»»½Ð¤¹¤ë¡Ë ¡¦Rigidbody.AddForce¥á¥½¥Ã¥É¤ÎForceMode
¡¡Àß·×ÊýË¡¤È¤·¤Þ¤·¤Æ¤Ï¡¢¥×¥ì¥¤¥ä¡¼¤Î°ÌÃÖ¾ðÊó¤ò¡¢¸½ºß¤Î°ÌÃÖ¤«¤é¤ß¤Æ¡¢Å¨¤Î¹¶·â¤¬È¯À¸¤·¤¿°ÌÃÖ¤ÈÈ¿ÂФÎÊý¸þ¤Ø¤È°ÜÆ°¤µ¤»¤ë¤è¤¦¤Ë¤·¤Æ¡¢¥Î¥Ã¥¯¥Ð¥Ã¥¯¤ò±é½Ð¤·¤Þ¤¹¡£
¡¡¤³¤Î¤È¤É¬Íפˤʤë¾ðÊ󤬡¢¥×¥ì¥¤¥ä¡¼¤ÈŨ¤È¤Î¡ÖÊý¸þ¡×¤Ç¤¹¡£¥×¥ì¥¤¥ä¡¼¤ÈŨ¤È¤Ï¤¾¤ì¤¾¤ì°ÌÃÖ¾ðÊó¤òTransform.position¤È¤·¤ÆÊÝͤ·¤Æ¤¤¤Þ¤¹¤¬
¤É¤Á¤é¤¬¤É¤ÎÊý¸þ¤ò¸þ¤¤¤Æ¤¤¤ë¡¢¤È¤¤¤¦¾ðÊó¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤½¤Î¤¿¤á¤Þ¤º¤Ï¡¢¤³¤Î¡ÖÊý¸þ¡×¤ò·×»»¤Ë¤è¤Ã¤Æ»»½Ð¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
Vector3 distination = ¥×¥ì¥¤¥ä¡¼¤Î°ÌÃÖ¾ðÊó - Ũ¤Î¹¶·â¤Î°ÌÃÖ¾ðÊó;
¡¡¤³¤Î·×»»¼°¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¥×¥ì¥¤¥ä¡¼¤ÈŨ¤È¤Î¡Öµ÷Î¥¡×¤¬º¹Ê¬¤È¤·¤Æ»»½Ð¤µ¤ì¤Þ¤¹¡£¤³¤Î¤È¤°ì½ï¤Ë¡ÖÊý¸þ¡×¤Î¾ðÊó¤â¼èÆÀ¤Ç¤¤Þ¤¹¡£

¡¡¥×¥ì¥¤¥ä¡¼¤ò¥Î¥Ã¥¯¥Ð¥Ã¥¯¤Ç°ÜÆ°¤µ¤»¤ëµ÷Î¥¤Ë¤Ä¤¤¤Æ¤Ï¡¢Å¨¤È¥×¥ì¥¤¥ä¡¼¤Î°ÌÃÖ´Ø·¸¤Ë´Ø·¸¤Ê¤¯°ìÄêÎ̤ˤ·¤¿¤¤¤Î¤Ç¡¢»»½Ð¤µ¤ì¤¿distinationÊÑ¿ô¤Ë¤ÏÀµµ¬²½½èÍý¤ò¹Ô¤¤¤Þ¤¹¡£
¤½¤Î¾å¤Ç¡¢ÀßÄꤷ¤Æ¤¤¤ëKnockbackPowerÊÑ¿ô¡Ê¥Î¥Ã¥¯¥Ð¥Ã¥¯¤µ¤»¤ëÎϡˤò³Ý¤±¹ç¤ï¤»¤Æ¡¢¥Î¥Ã¥¯¥Ð¥Ã¥¯¤òȯÀ¸¤µ¤»¤Þ¤¹¡£
¡¡PlayerController¥¹¥¯¥ê¥×¥È¤ÎOnTriggerEnter¥á¥½¥Ã¥É¤ò½¤Àµ¤·¤Æ¤¤¤¤Þ¤¹¡£¤Ê¤ªÄɲ乤ë½èÍý¤Î¤ß¤òµ½Ò¤·¤Æ¤¤¤Þ¤¹¤Î¤Ç
¤´¼«Ê¬¤Î¥á¥½¥Ã¥É¤ò»²¹Í¤Ë¡¢Å¬µ¹¤Ê°ÌÃ֤ˤ³¤Î½èÍý¤òÄɵ¤·¤Æ¤¯¤À¤µ¤¤¡£
PlayerController.cs
Rigidboby rb; // Start¥á¥½¥Ã¥É¤Ê¤É¤ÇÊÑ¿ô¤Ë¤ÏÃͤòÂåÆþºÑ¤È¤¹¤ë public float knockBackPower; // ¥Î¥Ã¥¯¥Ð¥Ã¥¯¤µ¤»¤ëÎÏ private void OnTriggerEnter(Collider other) { rb.velocity = Vector3.zero; // ¼«Ê¬¤Î°ÌÃÖ¤ÈÀÜ¿¨¤·¤Æ¤¤¿¥ª¥Ö¥¸¥§¥¯¥È¤Î°ÌÃ֤Ȥò·×»»¤·¤Æ¡¢µ÷Î¥¤ÈÊý¸þ¤ò½Ð¤·¤ÆÀµµ¬²½(®Å٥٥¯¥È¥ë¤ò»»½Ð) Vector3 distination = (transform.position - other.transform.position).normalized; rb.AddForce(distination * knockBackPower, ForceMode.VelocityChange); } }
¡¡Àµµ¬²½½èÍý¤Ç¤¹¡£Â®Å٥٥¯¥È¥ë¤ò»»½Ð¤·¤Þ¤¹¡£
¡¡¤³¤Î½èÍý¤ò¹Ô¤ï¤Ê¤¤¤È¡¢±óµ÷Î¥¤«¤é¤ÎŨ¤Î¹¶·â¤ò¼õ¤±¤¿¾ì¹ç¤Ë¡¢Î¥¤ì¤Æ¤¤¤ëµ÷Î¥¤¬±ó¤¤¤Û¤É¥Î¥Ã¥¯¥Ð¥Ã¥¯¤¹¤ëÎ̤¬Áý¤¨¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
Àµµ¬²½¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢ÃÍ¤Ï 0 ¡¢¤¢¤ë¤¤¤Ï 1 ¤È¤¤¤¦Â®Å٥٥¯¥È¥ë¤Ë¡¢µ÷Î¥¤ÈÊý¸þ¤Î¾ðÊó¤ÏÊݤ俤ޤޤÇÊÑ´¹¤µ¤ì¤Þ¤¹¡£
// ¼«Ê¬¤Î°ÌÃÖ¤ÈÀÜ¿¨¤·¤Æ¤¤¿¥ª¥Ö¥¸¥§¥¯¥È¤Î°ÌÃ֤Ȥò·×»»¤·¤Æ¡¢µ÷Î¥¤ÈÊý¸þ¤ò½Ð¤·¤ÆÀµµ¬²½(®Å٥٥¯¥È¥ë¤ò»»½Ð) Vector3 distination = (transform.position - other.transform.position).normalized;
¡¡Àµµ¬²½¤µ¤ì¤¿Ãͤò»ÈÍѤ·¤ÆAddForce¥á¥½¥Ã¥É¤ò¹Ô¤¦¤³¤È¤Ë¤è¤Ã¤Æ¡¢¾ï¤Ë°ìÄêÎ̤ΥΥ寥Х寤òȯÀ¸¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡AddForce¥á¥½¥Ã¥É¤ÎÂè2°ú¿ô¤Ë¤Ï¡¢ÎϤò¤É¤Î¤è¤¦¤Ë¤«¤±¤ë¤«ForceMode¤È¤·¤ÆÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£ÀßÄꤷ¤Ê¤¤¾ì¹ç¤Ë¤Ï ForceMode.Force ¤ËÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹¡£
º£²ó¤Ï ForceMode.VelocityChange ¤È¤¤¤¦ÀßÄê¤ò¹Ô¤¤¡¢¼ÁÎ̤˴ط¸¤Ê¤¯(̵»ë¤·¤Æ)¡¢½Ö´ÖŪ¤ÊÎϤò²Ã¤¨¤ë¤È¤¤¤¦¡¢ÊªÍý±é»»¤ò¹Ô¤¦½èÍý¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£
rb.AddForce(distination * knockBackPower, ForceMode.VelocityChange);
»²¹Íµ»ö
Unity¸ø¼°¥¹¥¯¥ê¥×¥ÈAPI
ForceMode
https://docs.unity3d.com/ScriptReference/ForceMode...
Unity»È¤¤Êý¥¬¥¤¥ÉÍÍ
¥ê¥¸¥Ã¥É¥Ü¥Ç¥£¤ËÎϤò²Ã¤¨¤ëÊýË¡
https://unity-guide.moon-bear.com/rigidbody-addfor...
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°
¥³¥á¥ó¥È¤ò¤«¤¯