Я работаю над 2D-игрой, в которой монстр с круглым телом постоянно движется по экрану. Я установил сетку, которая заполняется движением игрока, поэтому общая площадь монстра уменьшается в зависимости от того, покрывает ли игрок его площадь.
Используя следующий код, монстр движется непрерывно, но в какой-то момент он застревает в каком-то углу и перестает двигаться.
public class EnemyMovement : MonoBehaviour
{
private bool isStartMoving;
private Vector3 direction;
private float sFactor = 10.0f;
private float localScaleX, localScaleY;
//
public float cSpeed = 5.0f;
void Start ()
{
InitializeValues ();
}
private void InitializeValues ()
{
localScaleX = transform.localScale.x;
localScaleY = transform.localScale.y;
float xDirection = Random.Range (0, 2) * 2 - 1;
float yDirection = Random.Range (0, 2) * 2 - 1;
direction = new Vector3 (xDirection * cSpeed, yDirection * cSpeed, 0f);
rigidbody2D.velocity = direction;
isStartMoving = true;
}
void FixedUpdate ()
{
if (!isStartMoving)
return;
// current velocity
Vector3 cVel = rigidbody2D.velocity;
if (cVel == Vector3.zero)
return;
// normalized vector * constant speed
Vector3 tVel = cVel.normalized * cSpeed;
if (tVel.x > 0)
tVel.x = cSpeed;
else
tVel.x = -cSpeed;
if (tVel.y > 0)
tVel.y = cSpeed;
else
tVel.y = -cSpeed;
rigidbody2D.velocity = Vector3.Lerp (cVel, tVel, Time.deltaTime * sFactor);
}
}
Я распределил материал по физике следующим образом.
Что-то похожее на такую ситуацию происходит со мной.
Вы ясно видите, что в правом нижнем углу изображения монстр спит, хотя код непрерывного движения работает. Пожалуйста, дайте мне предложение, чтобы улучшить это.
Из приведенного выше кода я удалил следующий код:
if (cVel == Vector3.zero)
return;
Затем мой монстр застревает в угловом положении. Почему монстр спит в угловом положении, я не могу понять !!!