#c# #unity3d
#c# #unity3d
Вопрос:
(я редактирую код, ТЕПЕРЬ ОН РАБОТАЕТ (с функцией neu jump), проблема, похоже, в функции isGrouned (), но все еще не знаю, почему мой персонаж не всплывает grouned)
Символ застревает, когда я пытаюсь подскочить ближе к блоку (и двигаюсь в направлении блока). Какая-нибудь подсказка, что может происходить и как это решить?
ситуация:
Кажется, что символ застревает, когда звезда коллайдера контроллера символов уменьшает радиус.
Информация о NavMesh: информация о NavMesh2 [2
символьный контроллер:
Я ожидал, что персонаж достигнет верхней части блока, или, по крайней мере, он сможет подняться на эту небольшую разницу
код перехода:
public void jump()
{
if (OnSlope())
{
print("controller.height: " controller.height);
controller.Move(Vector3.down * controller.height / 2 * slopeForce * Time.deltaTime);
}
print("key press jump");
JumpMode = true;
StartCoroutine(JumpEvent());
}
private IEnumerator JumpEvent()
{
controller.slopeLimit = 90.0f;
float timeInAir = 0.0f;
//print("IEnumerator JumpEvent");
float timePassed = 0;
while (timePassed < 1.5F)
{
float jumpForce = jumpFallOff.Evaluate(timeInAir);
controller.Move(Vector3.up * jumpForce * jumpMultiplier * Time.deltaTime);
timeInAir = Time.deltaTime;
// Code to go left here
timePassed = Time.deltaTime;
yield return null;
}
/*
do
{
float jumpForce = jumpFallOff.Evaluate(timeInAir);
controller.Move(Vector3.up * jumpForce * jumpMultiplier * Time.deltaTime);
timeInAir = Time.deltaTime;
//print("INTOWHILE JumpEvent");
//print("inside- controller.isGrounded: " controller.isGrounded);
//print("inside-(controller.collisionFlags amp; CollisionFlags.Below) == 0): " ((controller.collisionFlags amp; CollisionFlags.Below) == 0));//.ToString()
//print("inside-((controller.collisionFlags amp; CollisionFlags.Above) == 0) " ((controller.collisionFlags amp; CollisionFlags.Above) == 0));
yield return null;
}
while (!controller.isGrounded);// amp;amp; controller.collisionFlags != CollisionFlags.Below);// .Above); ((controller.collisionFlags amp; CollisionFlags.Below) == 0) amp;amp; ((controller.collisionFlags amp; CollisionFlags.Above) == 0));//
*/
//print("outside- controller.isGrounded: " controller.isGrounded);
//print("outside- (controller.collisionFlags amp; CollisionFlags.Below) == 0): " ((controller.collisionFlags amp; CollisionFlags.Below) == 0));//.ToString()
//print("outside- ((controller.collisionFlags amp; CollisionFlags.Above) == 0) " ((controller.collisionFlags amp; CollisionFlags.Above) == 0));
controller.slopeLimit = 45.0f;
JumpMode = false;
}
Комментарии:
1. Вы используете navmesh?
2. @BugFinder да
3. вы сравнивали высоту блока с настройками navmesh для шагов?
4. @BugFinder для меня ничего странного. Я добавляю некоторую информацию NavMesh в сообщение, которая может помочь
5. Ваш блок высотой 1 м, и вы сказали ему, что он может подняться на 0,75 .. следовательно, он не поднимается на поле