¡¡Àë¸À¥Õ¥£¡¼¥ë¥É¤Ë¤Ï¡¢PhysicMaterial ·¿¤ÎÊÑ¿ô¤ò
SerializeField°À¤ÇÍÑ°Õ¤·¤Æ¤ª¤¤Þ¤¹¡£
¤³¤Î¤è¤¦¤Ë¤¹¤ë¤³¤È¤Ç
ÊÑ¿ô¤ÎÃÍ(Áàºî¤·¤¿¤¤¾ðÊó)¤ò¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤«¤éÅÐÏ¿¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¤½¤·¤Æ¤³¤Î
ÊÑ¿ô¤ò²ð¤¹¤ë¤³¤È¤Ç¡¢Dynamic Friction ¤È¤¤¤Ã¤¿¡¢
PhysicMaterial ¤¬´ÉÍý¤·¤Æ¤¤¤ë¾ðÊó¤òÁàºî¤¹¤ë¤³¤È¤¬½ÐÍè¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¿·¤·¤¯¥á¥½¥Ã¥É¤ò£²¤ÄÍÑ°Õ¤·¤Þ¤¹¡££±¤Ä¤Ï Update ¥á¥½¥Ã¥É¤Ç¤¹¡£¤³¤Î½èÍý¤ÎÃæ¤Ç Brake ¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡£
¡¡Update ¥á¥½¥Ã¥É¤ÏËè¥Õ¥ì¡¼¥à·Ñ³Ū¤Ë½èÍý¤ò¹Ô¤¦¥á¥½¥Ã¥É¤Ç¤¢¤ë¤¿¤á¡¢Update ¥á¥½¥Ã¥É¤ÎÃæ¤ÇÊ̤Υ᥽¥Ã¥É¤Î¸Æ¤Ó½Ð¤·¤ò¹Ô¤¦¤È
¸Æ¤Ó½Ð¤µ¤ì¤¿¥á¥½¥Ã¥É¤âËè¥Õ¥ì¡¼¥à¸Æ¤Ó½Ð¤µ¤ì¤Æ¤¤¤ë¾õÂ֤ˤʤê¤Þ¤¹¡£
¡¡Brake ¥á¥½¥Ã¥ÉÆâ¤Ë¤Ï¡¢²¼Êý¸þ¤Ë¥¡¼ÆþÎϤò¼õ¤±¼è¤Ã¤¿¤é¡¢¥¥ã¥é¤òÄä»ß¤µ¤»¤ë¤¿¤á¤Ë PhysicMaterial ¤òÁàºî¤·¤Æ¡¢Ë໤¤òȯÀ¸¤µ¤»¤ë¤³¤È¤Ç½ù¡¹¤Ë¥¥ã¥é¤òÄä»ß¤µ¤»¤ë½èÍý¤ò¼Â¹Ô¤·¤Þ¤¹¡£
¥¡¼ÆþÎϤ¬¤Ê¤¤¾õÂ֤ˤʤ俤顢ºÆÅÙË໤¤ò 0 ¤ËÌ᤹½èÍý¤â¹Ô¤¦¤¿¤á¡¢¤³¤ÎÀ©¸æ¤Ï if /else ʸ¤È¤·¤Æµ½Ò¤·¡¢¤¤¤º¤ì¤«ÊÒÊý¤Ë¤À¤±Ê¬´ô¤·¤Æ½èÍý¤ò¼Â¹Ô¤µ¤»¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£
¡¡¥Ý¥¤¥ó¥È¤È¤·¤Æ¤Ï¡¢Brake ¥á¥½¥Ã¥ÉÆâ¤Ç¤Ï
Rigidbody ¤òÍøÍѤ·¤¿·Ñ³Ū¤ÊÀ©¸æ¤Ï¹Ô¤ï¤Ê¤¤¤¿¤á¡¢FixedUpdate ¥á¥½¥Ã¥É¤Ç¤Ï¤Ê¤¯¡¢Update ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Þ¤¹¡£
¤Þ¤¿¡¢Brake ¥á¥½¥Ã¥ÉÆâ¤Ë¤Ï
if ʸÆâ¤ËÊ̤Πif ʸ¤¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤ÏºÇ½é¤Î if ʸ¤Î¾ò·ï¤òËþ¤¿¤·¤¿¤Î¤Á¡¢¼¡¤Î if ʸ¤òȽÄꤹ¤ë¹½Â¤¤Ç¤¹¡£
¤½¤Î¤¿¤á¡¢
ÊÌ¡¹¤Î if ʸ¤Î¥Ö¥í¥Ã¥¯¤Ë¤·¤Æ¤·¤Þ¤¦¤ÈÁÛÄꤷ¤Æ¤¤¤ëµóÆ°¤Ë¤Ê¤ê¤Þ¤»¤ó¡£
{¡¡}¡¡¤Î°ÌÃ֤ȿô¤ò³Îǧ¤·¤Ê¤¬¤é½èÍý¤ò½ñ¤¯¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
¡¡
¡¡¤³¤¦¤·¤¿À©¸æ¥í¥¸¥Ã¥¯¤Ë¤Ä¤¤¤Æ¡¢½èÍý¤È¥³¥á¥ó¥È¤ò¸«¤Ê¤¬¤é¤·¤Ã¤«¤ê¤È³Ø½¬¤·¤Æ¤¤¤¤Þ¤·¤ç¤¦¡£
PlayerController.cs
¡¡<=¡¡¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤¤Þ¤¹¡£
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private Rigidbody rb; // Rigidbody ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ÎÁàºî¤ò¹Ô¤¦¤¿¤á¡¢Rigidbody ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ò¼èÆÀ¤·¤ÆÂåÆþ¤¹¤ë¤¿¤á¤ÎÊÑ¿ô
¡¡¡¡[Header("°Üư®ÅÙ")] // Header°À¤òÊÑ¿ô¤ÎÀë¸À¤ËÄɲ乤ë¤È¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¾å¤Ë( )Æâ¤Ëµ½Ò¤·¤¿Ê¸»ú¤¬Êä¤Ȥ·¤Æɽ¼¨¤µ¤ì¤Þ¤¹¡£(¤³¤Îµ¡Ç½¼«ÂΤϥ¤¥ó¥¹¥Ú¥¯¥¿¡¼¤ËÊÑ¿ô¤òɽ¼¨¤µ¤»¤ëµ¡Ç½¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£)
public float moveSpeed;¡¡¡¡¡¡ // ¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¾å¤ËÊÑ¿ô¤¬É½¼¨¤µ¤ì¤Æ¤¤¤ë¤Î¤Ï¡¢public ½¤¾þ»Ò¤ÇÀë¸À¤·¤Æ¤¤¤ë¤¿¤á¤Ç¤¹¡£
////* ¤³¤³¤«¤éÄɲà *////
[SerializeField] // SerializeField°À¤òÊÑ¿ô¤ÎÀë¸À¤ËÄɲ乤ë¤È¡¢private ½¤¾þ»Ò¤ÎÊÑ¿ô¤ò¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¾å¤Ëɽ¼¨¤µ¤»¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
private PhysicMaterial pmNoFriction;¡¡¡¡¡¡// ÁàºîÀ©¸æ¤ò¹Ô¤¦ PhysicMaterial ¤ò¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤«¤éÅÐÏ¿¤·¤ÆÃͤȤ·¤ÆÂåÆþ
////* ¤³¤³¤Þ¤Ç *////
void Start()
{
// ¤³¤Î¥¹¥¯¥ê¥×¥È¤¬¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬»ý¤Ã¤Æ¤¤¤ë Rigidbody ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î¾ðÊó¤ò¼èÆÀ¤·¤Æ rb ÊÑ¿ô¤ËÂåÆþ
rb = GetComponent<Rigidbody>();
}
void FixedUpdate() {
¡¡¡¡¡¡¡¡// °ÜÆ°
Move();
}
/// <summary>
/// °ÜÆ°
/// </summary>
private void Move() {
// ¥¡¼¥Ü¡¼¥É¤Îº¸±¦Ìð°õ¤Î¥¡¼ÆþÎϤòȽÄꤷ¡¢-1.0f ¡Á 1.0f ¤Þ¤Ç¤ÎÃͤòÂåÆþ
float x = Input.GetAxis("Horizontal");
// Rigidbody ¤Î Velocity(®ÅÙ)¤Ë¡¢¥¡¼ÆþÎϤÎȽÄêÃͤȰÜư®ÅÙ¤òÂåÆþ¤·¤Æ¥¥ã¥é¤ò°ÜÆ°
rb.velocity = new Vector3(x * moveSpeed, rb.velocity.y, rb.velocity.z);
¡¡¡¡¡¡¡¡Debug.Log(rb.velocity);
}
////* ¤³¤³¤«¤é¥á¥½¥Ã¥É¤ò£²¤ÄÄɲà *////
void Update()
{
// ¥Ö¥ì¡¼¥
Brake();
}
¡¡¡¡/// <summary>
/// ¥Ö¥ì¡¼¥ ¤³¤Î½èÍý¤Ï Update Æâ¤Ë¸Æ¤Ó½Ð¤·¤¬µ½Ò¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢Update ¤ÈƱ¤¸Ëè¥Õ¥ì¡¼¥à¤´¤È¤Ë¸Æ¤Ð¤ì¤ë½èÍý¤Ë¤Ê¤ë
/// </summary>
private void Brake() {
// ¾å²¼Êý¸þ¤Î¥¡¼ÆþÎϤò¼õ¤±ÉÕ¤±¤ÆÃͤòÂåÆþ
float vertical = Input.GetAxis("Vertical");
// ¼èÆÀ¤·¤¿Ãͤ¬ 0 ¤è¤ê¤â¾®¤µ¤¤ÃÍ(²¼Êý¸þ¤Î¥¡¼ÆþÎÏ)¤Ê¤é
if (vertical < 0) {
// NoFriction ¤Î DynamicFriction ¤ÎÃͤò½ù¡¹¤ËÂ礤¯¤¹¤ë
pmNoFriction.dynamicFriction += Time.deltaTime;
// ¤â¤·¤â DynamicFriction ¤ÎÃͤ¬ºÇÂçÃͤǤ¢¤ë 1.0f ¤òĶ¤¨¤¿¤é
if (pmNoFriction.dynamicFriction > 1.0f) {¡¡¡¡//¡¡¢«¡¡if (vertical < 0) ʸ¤Î {¡¡}¡¡Ãæ¤ËÊ̤Πif ʸ¤òºîÀ®¤¹¤ë
// 1.0f ¤ÇÄä»ß¤¹¤ë¡£¤³¤Î½èÍý¤ò¤·¤Ê¤¤¤È¤É¤¦¤Ê¤ë¤«¡¢°ìÅÙ½èÍý¤ò¥³¥á¥ó¥È¥¢¥¦¥È¤·¤Æ³Îǧ¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
pmNoFriction.dynamicFriction = 1.0f;
}
}
// ¼èÆÀ¤·¤¿Ãͤ¬ 0¡¢¤¢¤ë¤¤¤Ï 0 ¤è¤ê¤âÂ礤ÊÃÍ(¥¡¼ÆþÎϤʤ·¡¢¤¢¤ë¤¤¤Ï¾åÊý¸þ¤Î¥¡¼ÆþÎÏ)¤Ê¤é
else {
// Ë໤¤ò 0 ¤ËÌ᤹¡¡=>¡¡ºÆ¤Ó³ê¤ê»Ï¤á¤ë¤è¤¦¤Ë¤Ê¤ë
pmNoFriction.dynamicFriction = 0;
}
}
////* ¤³¤³¤Þ¤Ç *////
}
¡¡¥¹¥¯¥ê¥×¥È¤ò½¤Àµ¤·¤¿¤é¥»¡¼¥Ö¤ò¹Ô¤¤¡¢PlayerController ¥¹¥¯¥ê¥×¥È¤¬¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë Penguin ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤ò³Îǧ¤·¤Þ¤¹¡£
¿·¤·¤¯ SerializeField°À¤ÇÀë¸À¤·¤¿ pmNoFriction ÊÑ¿ô¤¬É½¼¨¤µ¤ì¤Æ¤¤¤ì¤ÐÌäÂꤢ¤ê¤Þ¤»¤ó¡£
Penguin ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¡¡¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü