***Прочитал множество статей по построению дрифт кара, каких только советов не дают. Согласен, что правильные настройки двигателя, трансмиссии и подвески - очень важны. Но для "правильного" дрифта так же важны и покрышки, они должны быть гладкими и прочными, поэтому мы выбираем в каталоге - шины без протектора. Но все забывают что это игра, и потому за сцепление с трассой отвечают только переменные. Сейчас всё объясню***
Для того чтобы настроить сцепление шин с трассой нам понадобятся только две вещи - исходники java и блокнот (ну или любой другой текстовый редактор).
1) В папке parts/scripts/rgearpart/reciprocatingrgearpart/src находим Tyre.java (если такого нет - то создаём Tyre.java, открываем его блокнотом и копируем туда
public class Tyre extends ReciprocatingRGearPart { final static int tcSTREET = 0; final static int tcSPORT = 1; final static int tcSUPERSPORT = 2; final static int tcDRAGRADIAL = 3;
if ((whlID>=0) && ((whlID % 2)==1)) setSlotPos(1, new Vector3(0.0,0.0,0.0), new Ypr(0.0,0.0,0.0) ); else setSlotPos(1, new Vector3(0.0,0.0,0.0), new Ypr(3.142,0.0,0.0) ); } }
public void SetupRubber( int RT ) { String compound_label;
if (RT == tcSPORT) // sport tyre // { rubber_rigidity = 0.900; load_mul = 0.800*load_mul2; min_rollres = 0.005*roll_res_mul; // tyre: depends on contact patch friction = default_fric/rubber_rigidity; // tyre: static friction (compound efficiency) sliction = 0.740*slic_mul; // tyre: slip ratio (sliction*friction = slipfriction) frictn_x = 1.000; // tyre: longitudinal friction and sliction * ratio = horizontal friction and sliction loadsmooth = 0.300; compound_label = " medium compound sport tyre"; police_check_fine_value = 0.0; } else if (RT == tcSUPERSPORT) // supersport tyre // { rubber_rigidity = 0.750; load_mul = 0.800*load_mul2; min_rollres = 0.004*roll_res_mul; // tyre: depends on contact patch friction = default_fric/rubber_rigidity; // tyre: static friction (compound efficiency) sliction = 0.760*slic_mul; // tyre: slip ratio (sliction*friction = slipfriction) frictn_x = 1.000; // tyre: longitudinal friction and sliction * ratio = horizontal friction and sliction loadsmooth = 0.250; compound_label = " soft compound racing tyre"; police_check_fine_value = 50.0; } else if (RT == tcDRAGRADIAL) // drag-radial // { rubber_rigidity = 0.550; load_mul = 1.800*load_mul2; min_rollres = 0.002*roll_res_mul; // tyre: depends on contact patch friction = default_fric/rubber_rigidity; // tyre: static friction (compound efficiency) sliction = 0.720*slic_mul; // tyre: slip ratio (sliction*friction = slipfriction) frictn_x = 1.000; // tyre: longitudinal friction and sliction * ratio = horizontal friction and sliction loadsmooth = 0.750; compound_label = " drag radial"; police_check_fine_value = 50.0; } else if (RT == tcSTREET) // street tyre // { rubber_rigidity = 1.000; load_mul = 0.750*load_mul2; min_rollres = 0.0055*roll_res_mul; // tyre: depends on contact patch friction = default_fric/rubber_rigidity; // tyre: static friction (compound efficiency) sliction = 0.695*slic_mul; // tyre: slip ratio (sliction*friction = slipfriction) frictn_x = 1.000; // tyre: longitudinal friction and sliction * ratio = horizontal friction and sliction loadsmooth = 0.500; compound_label = " hard compound street tyre"; police_check_fine_value = 0.0; } else { rubber_rigidity = 1.000; load_mul = 0.750*load_mul2; min_rollres = 0.0055*roll_res_mul; // tyre: depends on contact patch friction = default_fric/rubber_rigidity; // tyre: static friction (compound efficiency) sliction = 0.695*slic_mul; // tyre: slip ratio (sliction*friction = slipfriction) frictn_x = 1.000; // tyre: longitudinal friction and sliction * ratio = horizontal friction and sliction loadsmooth = 0.500; compound_label = " tyre"; police_check_fine_value = 0.0; } friction = (1.3+(friction-1.0)/0.8*0.4)*1.15; value /= rubber_rigidity; brand_new_prestige_value = 25.0/rubber_rigidity + tyre_width/10.0-20.0; name = name_prefix + " " + tyre_size_label+compound_label; }
public void calcStuffs() { for (minRimWidth_i=0; minRimWidth_i<21; minRimWidth_i++) if (render_types[minRimWidth_i]) { minRimWidth = minRimWidth_i*0.5+5.0; break; }
for (maxRimWidth_i=20; maxRimWidth_i>=0; maxRimWidth_i--) if (render_types[maxRimWidth_i]) { maxRimWidth = maxRimWidth_i*0.5+5.0; break; }
float R = wheel_radius*2.0/25.4; description = "This "+name+" is a "+Float.toString(tyre_width, "%1.0f mm wide ")+" tyre, that's diameter is "+Float.toString(R, "%1.0f inch at the rims and the height of its sidewalls is ")+Float.toString(profile_height, "%1.0f mm. ")+Float.toString(R, "It is compatible with all %1.0f inch rims ")+Float.toString(minRimWidth, "that are between %1.1f and ")+Float.toString(maxRimWidth, "%1.1f inch in width.");
if (police_check_fine_value > 0.0) description = description + Float.toString(police_check_fine_value, " This tyre is not street legal! Police may fine you up to $%1.0f!"); }
public String installCheck( Part p, int[] slotId ) { if (p) { if (p instanceof Wheel) { Wheel wheel = p; int wr1=wheel.wheel_radius*1000.0; int wr2=wheel_radius; if (wr1 != wr2) return "The tyre inner radius does not match the rim!"; else if (wheel.rim_width > maxRimWidth) return "This tyre is too narrow for this rim!"; else if (wheel.rim_width < minRimWidth) return "This tyre is too wide for this rim!";
return null; } else return "Tyres can only be installed on rims!"; } //else return "There's nothing to install this part to!"; }
public void SetupTyre( float W, float r, float R, float rW, int compound_type, float optI ) { value = HUF2USD(W*80+2500*(R-13.0));
wheel_radius = R*25.4/2.0; tyre_width = W; profile_ratio = r/100.0; if (optI > 0.0) optimal_inflation = optI; slide_cm = (tyre_width-rW*25.4)/10.0; slide_interval = (tyre_width-rW*25.4)/tyre_width; // Sala: percentage to the tyre width // if (slide_interval < 0.0) slide_interval = 0.0; if (slide_interval > 1.0) slide_interval = 1.0;
profile_height = tyre_width*profile_ratio; max_radius = (wheel_radius+profile_height)/1000.0; // Sala: mm -> m // min_radius = wheel_radius/1000.0; // Sala: 1.5cm more than rim diameter, mm -> m // if (max_radius < min_radius) min_radius = max_radius-0.01;
SetupRubber(compound_type); if (optI > 0.0) SetInflation(optimal_inflation); }
public void updatevariables() { SetInflation(inflation,1); }
public void load( File saveGame ) { super.load( saveGame );
int save_ver = saveGame.readInt();
if (save_ver >= 1) { inflation = saveGame.readFloat(); } }
public void save( File saveGame ) { super.save( saveGame );
2)Открываем блокнотом Tyre.java, здесь нам понадобится только несколько строчек это rubber_rigidity отвечает за само сцепление с трассой (чем оно больше - тем хуже сцепление, не советую ставить меньше 0.200 (не будут поворачиваться передние колёса, слишком большое сцепление) и больше 4.000 (будет буксовать, слишком малое сцепление) ) и строчки: if (RT == tcSPORT) // sport tyre // , if (RT == tcSUPERSPORT) // supersport tyre //, if (RT == tcDRAGRADIAL) // drag-radial //, if (RT == tcSTREET) // street tyre // ( это название категорий, к которым относятся наши покрышки)
3) Меняем значение rubber_rigidity для каждой категории покрышек. Сделайте их разными, чтобы был и разный эффект. Вот мои значения: if (RT == tcSPORT) // sport tyre // rubber_rigidity = 1.000; ( покрышки для кольцевых гонок) if (RT == tcSUPERSPORT) // supersport tyre // rubber_rigidity = 0.550; ( покрышки для спринта) if (RT == tcDRAGRADIAL) // drag-radial // rubber_rigidity = 0.250; ( покрышки для драга - только по прямой) if (RT == tcSTREET) // street tyre // rubber_rigidity = 3.800; ( покрышки для дрифта) Сохраняем.
4) Заходим в папку \parts\Rimpack_BB93\Scripts\src ( делаю на примере шин BB93 3D Tyres pack 2 т.к есть нужные нам исходники) и открываем блокнотом нужные нам шины (благо есть название и радиус) - я возьму для примера эти Pilot_15.java
5) Ищем строчки SetupTyre(245.0, 16.0, 15.0, 10.0, tcSTREET, 2.0); (здесь изменяем только категорию(название в скобках) к которой будет относится наша шина. Её можно отнести к 4 категориям на выбор: tcSTREET или tcDRAGRADIAL или tcSUPERSPORT или tcSPORT(выбор зависит от желаемого эффекта, смотрим пункт 3) было SetupTyre(245.0, 16.0, 15.0, 10.0, tcSTREET, 2.0); стало SetupTyre(245.0, 16.0, 15.0, 10.0, tcDRAGRADIAL , 2.0); или SetupTyre(245.0, 16.0, 15.0, 10.0, tcSUPERSPORT , 2.0); или SetupTyre(245.0, 16.0, 15.0, 10.0, tcSPORT, 2.0);
и строчка, которая отвечает за название в игре (т.е можно сразу написать Drift, Sprint или любое другое - чтобы мы видели наглядно какую шину мы изменили и для какого типа гонок её лучше использовать) было name = "BB's Michelin Pilot 245/20 R15"; стало name = "BB's Michelin Pilot Drift 245/20 R15"; ( я дописал Drift - теперь я знаю для чего эта шина лучше подходит) Сохраняем.
6) Вот и всё, главное не забывайте - делать бэкапы.
П.с Для дрифта я ставлю на заднюю ось покрышки с наименьшим сцеплением (т.е те где rubber_rigidity = 3.800) и на переднюю ось наоборот - покрышки со средним сцеплением ( т.е те где rubber_rigidity = 0.550).
Спасибо за внимание. Подпись отключена!!!
Сообщение отредактировал Region-161 - Среда, 07.01.2015, 01:42
Прошу поправочки Tyre.java . По тутору пытался переписать, да что-то не выходило, всё из-за название этого файла. В целом отличный тутор. Респект автору
Прошу поправочки Tyre.java . По тутору пытался переписать, да что-то не выходило, всё из-за название этого файла. В целом отличный тутор. Респект автору
Прошу простить за опечатку, исправлю) Спасибо за ваше мнение) Подпись отключена!!!
Сообщение отредактировал Region-161 - Воскресенье, 18.01.2015, 18:07
В общем переписал я покрышки, поставил значение tcSupersport на 650, и в тайм-аттаке катался, заметил что покрышки стали сильно изнашиваться, буквально один круг по Нёрбургрингу и они почти на нуле, может как-то исправить можно? Под дрифт прописал ещё, значение 2100 вроде как, так они вообще не стираются
Сообщение отредактировал Sashka28 - Суббота, 24.01.2015, 17:17