void FollowFloor() { //If we are detecting a floor transform if (state.floor != null) { //If it is a different floor from the last one if (state.floorState.transform == null || state.floorState.transform != state.floor) { state.floorState = TransformState.From(state.floor); } //Follow the floor transform if grounded else if (Grounded) { //Follow position transform.position += state.floor.position - state.floorState.position; //Move(state.floor.position - state.floorState.position); //Follow rotation Quaternion dif = Quaternion.FromToRotation(state.floorState.forward, state.floor.forward); transform.rotation = dif * transform.rotation; Vector3 delta = transform.position - state.floor.position; delta = dif * delta; transform.position = state.floor.position + delta; //state.floorState = TransformState.From(state.floor); } state.floorState = TransformState.From(state.floor); } else { state.floorState = TransformState.Empty(); } }