Я создаю систему движений для игры от третьего лица в платформер / экшн. Так как контроллер персонажа просто останавливается на наклонной поверхности с уклоном, превышающим его максимум, я запрограммировал некоторую приличную логику наклона, но она достигает граничного случая.
RaycastHit hit;
Physics.Raycast(transform.position, Vector3.down, out hit);
if (isGrounded)
{
if (Vector3.Angle(transform.up, hit.normal) > CC.slopeLimit)
{
gravVector.x += (1f - hit.normal.y) * hit.normal.x * slideFriction * Time.deltaTime;
gravVector.z += (1f - hit.normal.y) * hit.normal.z * slideFriction * Time.deltaTime;
if (gravVector.y > -maxGravity * Vector3.Angle(transform.up, hit.normal) / 90)
{
gravVector.y -= Vector3.Angle(transform.up, hit.normal) / 90 * accGravity * Time.deltaTime;
}
return gravVector;
}
//else gravity is straight down n stuff
}
Поскольку я использую прямую RaycastВниз от источника игрока, чтобы найти нормаль поверхности, на которой он находится, игрок может скользить до конца склона, и Капсула все еще будет сталкиваться с уклоном, но лучевая трансляция либо ударяет по плоской поверхности, либо вообще ничего иигрок застревает в падающем состоянии на конце наклонной поверхности.
Есть ли способ получить нормаль поверхностиплеер включен без какой-либо безумной сферической системы радиопередачи или чего-то еще? Я пытался использовать контроллер персонажа и некоторые другие коллайдеры вокруг игрока, чтобы получить точки соприкосновения, но я просто не могу заставить этот материал работать.