не работает прыжок в FixedUpdate
Добавлено: 18 сен 2012, 17:13
Здравствуйте!
Всё началось с того, что я создал Билд и запустил его на "Fantastic" уровне графики. И тут я заметил, что скорость шара
заметно отличается от того, что была в несобранной игре (подскажите каким словом это назвать).
Я разобрался и узнал, что расчёт физики нужно проводить в FixedUpdate, а не в Update. Я сменил название события, и снова
запустил билд с наихудшим качеством.
Всё отлично - шар катается с нужной скоростью! Но не тут то было. Оказывается из за того, что я сменил событие, в котором
прописан весь контроллер шара, у меня очень редко стал срабатывать "прыжок" (примерно один раз в 15 нажатий на клавишу). Далее я
запустил билд с наивысшим качеством. Прыжок работает, но, как выяснилось позже, в редких случаях игнорирует нажатие на
клавишу. Т.е. чем ниже качество - тем реже работает прыжок.
Пожалуйста, помогите разобраться с этим. Прикрепляю скрипт и билд.
Всё началось с того, что я создал Билд и запустил его на "Fantastic" уровне графики. И тут я заметил, что скорость шара
заметно отличается от того, что была в несобранной игре (подскажите каким словом это назвать).
Я разобрался и узнал, что расчёт физики нужно проводить в FixedUpdate, а не в Update. Я сменил название события, и снова
запустил билд с наихудшим качеством.
Всё отлично - шар катается с нужной скоростью! Но не тут то было. Оказывается из за того, что я сменил событие, в котором
прописан весь контроллер шара, у меня очень редко стал срабатывать "прыжок" (примерно один раз в 15 нажатий на клавишу). Далее я
запустил билд с наивысшим качеством. Прыжок работает, но, как выяснилось позже, в редких случаях игнорирует нажатие на
клавишу. Т.е. чем ниже качество - тем реже работает прыжок.
Пожалуйста, помогите разобраться с этим. Прикрепляю скрипт и билд.
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class characterSphere : MonoBehaviour {
public float LeftV = 8; //движение влево
public float RightV = -8; //движение вправо
public Vector3 UpV = new Vector3(0, 5, 0); //вектор прыжка
public RaycastHit boxhit;
public Vector3 rayVector = new Vector3(0,-0.1F,0);
public float distance;
public Vector3 redLine;
void Start () {
rigidbody.collisionDetectionMode = CollisionDetectionMode.Discrete;
distance = boxhit.distance;
}
void FixedUpdate () {
//движемся влево
if (Input.GetKey(KeyCode.A))
rigidbody.AddForce(0, 0, LeftV);
//движемся вправо
if (Input.GetKey(KeyCode.D))
rigidbody.AddForce(0, 0, RightV);
//прыжок
if (Input.GetKeyDown(KeyCode.E))
if (Physics.Raycast(transform.position, new Vector3(0,-0.1F,0), out boxhit, 0.5F)){
Debug.DrawLine (transform.position, boxhit.point);
rigidbody.AddForce(UpV, ForceMode.Impulse);
}
//передвижение в воздухе
if (Physics.Raycast(transform.position, new Vector3(0,-0.1F,0), out boxhit, 0.5F)){
LeftV = 8;
RightV = -8;
}
else {
LeftV = 5;
RightV = -5;
}
}
}
using System.Collections;
public class characterSphere : MonoBehaviour {
public float LeftV = 8; //движение влево
public float RightV = -8; //движение вправо
public Vector3 UpV = new Vector3(0, 5, 0); //вектор прыжка
public RaycastHit boxhit;
public Vector3 rayVector = new Vector3(0,-0.1F,0);
public float distance;
public Vector3 redLine;
void Start () {
rigidbody.collisionDetectionMode = CollisionDetectionMode.Discrete;
distance = boxhit.distance;
}
void FixedUpdate () {
//движемся влево
if (Input.GetKey(KeyCode.A))
rigidbody.AddForce(0, 0, LeftV);
//движемся вправо
if (Input.GetKey(KeyCode.D))
rigidbody.AddForce(0, 0, RightV);
//прыжок
if (Input.GetKeyDown(KeyCode.E))
if (Physics.Raycast(transform.position, new Vector3(0,-0.1F,0), out boxhit, 0.5F)){
Debug.DrawLine (transform.position, boxhit.point);
rigidbody.AddForce(UpV, ForceMode.Impulse);
}
//передвижение в воздухе
if (Physics.Raycast(transform.position, new Vector3(0,-0.1F,0), out boxhit, 0.5F)){
LeftV = 8;
RightV = -8;
}
else {
LeftV = 5;
RightV = -5;
}
}
}