Синтаксис:
Используется csharp
grounded = controller.isGrounded;
//grounded = (controller.collisionFlags & CollisionFlags.CollidedBelow) != 0;
Debug.Log("grounded = "+grounded);
//grounded = (controller.collisionFlags & CollisionFlags.CollidedBelow) != 0;
Debug.Log("grounded = "+grounded);
В консоли видно что переменная grouded постоянно меняет значение.
Перенес код перемещения из Update в FixedUpdate (поменяв Time.deltaTime на Time.fixedDeltaTime). Теперь если персонаж остановится, то значение grounded тоже перестает меняться.
Вот 2 варианта кода перемещения, глючит с обоими:
Синтаксис:
Используется csharp
if (side != 0.000f || vert != 0.000f) {
Vector3 vect = transform.position;
if (isChar) { // с контроллером
Vector3 transit;
if (grounded) {
vert = 0.0f;
transit = new Vector3(side * Time.deltaTime, 0.0f, 0.0f);
}
else {
vert -= gravity * Time.deltaTime;
transit = new Vector3(side * Time.deltaTime, vert * Time.deltaTime, 0.0f);
}
controller.Move(transit);
vect = transform.position;
}
// без контроллера
else {
vect.x += side*Time.deltaTime;
vert = (prev_position-transform.position).y;
transform.position = vect;
prev_position = transform.position;
}
cam.transform.position = vect + distCam; // передвигаем камеру
}
Vector3 vect = transform.position;
if (isChar) { // с контроллером
Vector3 transit;
if (grounded) {
vert = 0.0f;
transit = new Vector3(side * Time.deltaTime, 0.0f, 0.0f);
}
else {
vert -= gravity * Time.deltaTime;
transit = new Vector3(side * Time.deltaTime, vert * Time.deltaTime, 0.0f);
}
controller.Move(transit);
vect = transform.position;
}
// без контроллера
else {
vect.x += side*Time.deltaTime;
vert = (prev_position-transform.position).y;
transform.position = vect;
prev_position = transform.position;
}
cam.transform.position = vect + distCam; // передвигаем камеру
}
Синтаксис:
Используется csharp
Vector3 vect = transform.position;
if (isChar) { // с контроллером
Vector3 transit;
grounded = (controller.collisionFlags & CollisionFlags.CollidedBelow) != 0;
if (grounded) {
vertAccel = 0.0f;
transit = Vector3.right * side * Time.deltaTime;
}
else {
vertAccel -= gravity * Time.deltaTime;
transit = Vector3.right * side * Time.deltaTime + Vector3.up * vertAccel * Time.deltaTime;
}
controller.Move(transit);
vect = transform.position;
}
// без контроллера
else {
vect.x += side*Time.deltaTime;
vert = (prev_position-transform.position).y;
transform.position = vect;
prev_position = transform.position;
}
cam.transform.position = vect + distCam; // передвигаем камеру
if (isChar) { // с контроллером
Vector3 transit;
grounded = (controller.collisionFlags & CollisionFlags.CollidedBelow) != 0;
if (grounded) {
vertAccel = 0.0f;
transit = Vector3.right * side * Time.deltaTime;
}
else {
vertAccel -= gravity * Time.deltaTime;
transit = Vector3.right * side * Time.deltaTime + Vector3.up * vertAccel * Time.deltaTime;
}
controller.Move(transit);
vect = transform.position;
}
// без контроллера
else {
vect.x += side*Time.deltaTime;
vert = (prev_position-transform.position).y;
transform.position = vect;
prev_position = transform.position;
}
cam.transform.position = vect + distCam; // передвигаем камеру
В качестве примера где работает беру SewerProject. Настройки физики и параметры контроллера персонажа - те же.