Keine Angst ich bin nicht beleidigt ^^
Allerdings ist es genau so wie du geschrieben hast!
Ich erklär es jetzt mal ganz genau auf deutsch(bin nicht so gut in englisch)
Also
Ich habe einen Spieler welcher standartmäßig 2 Animationen abspielt!
"Stand" und "walk"
bei der stand animation wird nur der Brustkorb animiert und bei der walkanimation nur die Beine!
Genau wie du gesagt hast, damit es natürlicher aussieht ^^
so!weiter gehts!
Mein Spieler besteht aus nur einem Modell und deswegen muss ich Arme,Kopf und Beine einzeln animieren was ich mit bone animationen und Bone rotate mache!
Früher hatte ich seperate Modelle welche ich dann einzeln ansteuern konnte!
Heute benutze ich wegen dem Realismus und besseren aussehen das Bone manipulationsprinzip!
In meinem Spiel kann der Spieler sich entscheiden welche Waffe er in welche Hand nimmt, so wie damals in Halo2 für die Xbox!
daher muss auch beim aufheben jeder Arm einzeln animiert werden was ich mit ANM_ADD mache!
Dabei wird NUR der Arm bewegt Brustkorb Kopf und Beine bleiben unverändert animiert!
wenn der Spieler nun die Waffe aus dem holster nimmt animiert er logischerweise ja nur den linken arm da er sie ja auch mit der linken Hand eingesteckt hat!
Wie bereits erwähnt funktioniert dieses Prinzip relativ gut!
Nun kommt das Problem!
Hat der Spieler allerdings 2 Waffen aufgesammelt muss er ja logischerweise den linken arm via ANM_ADD und den rechten Arm via ANM_ADD animieren, damit beide Arme sich die für sie bestimmten waffen holen!
Und da scheint mein Script einen Fehler zu haben!
Denn erst wenn ich beide Arme gleichzeitig animiere verdrehen sich beide Arme komisch!
der Befehl Bone_reset (welcher bei der einmaligen animation notwendig war) zeigte hier allerding keine besonders große wirkung!
Meine Frage an alle die jetzt mitgelesen haben:
hat jemand irgendein funktionierendes Script wo:
-eine Basisanimation abegspielt wird
-und 2 Zusatzanimtionen ZEITGLEICH hinzugefügt werden!
oder kann jemand helfen mein Script zu korrigieren!
Hier eine ausführlichere Variante aus meinem Script
function interactionssystem_p2()
{
///////////////////////////////////////////////////////////////
// define the Interactionsrange
....
//add here a Interactionssystem(weappickup,Objekt pickup)
///ANIMATE Weapon take
////////////////////////
//CALL HERE THE WEAP TAKE [ONE-HAND-WEAPONS]
////////////////////////
//left1
if(slot_active_p2==1&&slotchange_var_p2==1&&slot1_lefthand_used_p2==1&&slot1_righthand_used_p2==0)
{
ent_bonereset_branch(my,"arm_up_left");
ent_bonereset_branch(my,"arm_up_right");//delete this entry later
//TAKE
//NOTE: PICKUP adn Take animation is the same
if(take_left_anim<100)
{
ent_animate(my,"t_leftehw_h",take_left_anim, ANM_ADD); // animiere das Modell (benutze "turn")
take_left_anim+=8*time_step;
}
if(take_left_anim>=100)
{
//BUG-Line
ent_bonereset_branch(my,"arm_up_left");
ent_bonereset_branch(my,"arm_up_right");//delete this entry later
//
take_left_anim=100;
position_slot1_leftweap_p2=1;
ent_animate(my,"h_leftehw",1, ANM_ADD); // animiere das Modell (benutze "turn")
}
if(arm_left_angle_p2.tilt!=camera2.tilt&&take_left_anim==100)//&&take_ehw_anim >=80
{
ent_bonerotate(my,"arm_up_left",arm_left_angle_p2);
arm_left_angle_p2.tilt+=30*time_step;
}
if(arm_left_angle_p2.tilt>=camera2.tilt+80&&take_left_anim==100)//&&take_ehw_anim >=80
{
arm_left_angle_p2.tilt=camera2.tilt+80;
}
}
//PUTAWAY
/////////
if(slot_active_p2==0&&slotchange_var_p2==1&&slot1_lefthand_used_p2==1&&slot1_righthand_used_p2==0&&take_left_anim>0)
{
if(arm_left_angle_p2.tilt>=0)
{
ent_bonerotate(my,"arm_up_left",arm_left_angle_p2);
arm_left_angle_p2.tilt-=30*time_step;
}
if(arm_left_angle_p2.tilt<=0)//animate th take proces with tilt°
{
arm_left_angle_p2.tilt=0;
//animate_put_ehw=0;
}
if(take_left_anim>0&&arm_left_angle_p2.tilt<=0)
{
ent_bonereset_branch(my,"arm_up_right");//delete this entry later
ent_bonereset_branch(my,"arm_up_left");
ent_animate(my,"t_leftehw_h",take_left_anim, ANM_ADD); // animiere das Modell (benutze "turn")
take_left_anim-=8*time_step;
}
if(take_left_anim<=33.33)
{
position_slot1_leftweap_p2=2;
}
if(take_left_anim<=0 && arm_left_angle_p2.tilt==0)
{
take_left_anim=0;
position_slot1_leftweap_p2=2;
}
}
///////////////////////////////////////////////////////////////
//right1
if(slot_active_p2==1&&slotchange_var_p2==1&&slot1_righthand_used_p2==1&&slot1_lefthand_used_p2==0)
{
ent_bonereset_branch(my,"arm_up_left");
ent_bonereset_branch(my,"arm_up_right");//delete this entry later
//TAKE
//NOTE: PICKUP adn Take animation is the same
if(take_right_anim<100)
{
ent_animate(my,"t_rightehw_h",take_right_anim, ANM_ADD); // animiere das Modell (benutze "turn")
take_right_anim+=8*time_step;
}
if(take_right_anim>=100)
{
//BUG-Line
ent_bonereset_branch(my,"arm_up_left");
ent_bonereset_branch(my,"arm_up_right");//delete this entry later
//
take_right_anim=100;
position_slot1_rightweap_p2=1;
ent_animate(my,"h_rightehw",1, ANM_ADD); // animiere das Modell (benutze "turn")
}
if(arm_right_angle_p2.tilt!=camera2.tilt&&take_right_anim==100)//&&take_ehw_anim >=80
{
ent_bonerotate(my,"arm_up_right",arm_right_angle_p2);
arm_right_angle_p2.tilt+=30*time_step;
}
if(arm_right_angle_p2.tilt>=camera2.tilt+80&&take_right_anim==100)//&&take_ehw_anim >=80
{
arm_right_angle_p2.tilt=camera2.tilt+80;
}
}
//PUTAWAY
/////////
if(slot_active_p2==0&&slotchange_var_p2==1&&slot1_righthand_used_p2==1&&take_right_anim>0&&slot1_lefthand_used_p2==0)
{
if(arm_right_angle_p2.tilt>=0)
{
ent_bonerotate(my,"arm_up_right",arm_right_angle_p2);
arm_right_angle_p2.tilt-=30*time_step;
}
if(arm_right_angle_p2.tilt<=0)//animate th take proces with tilt°
{
arm_right_angle_p2.tilt=0;
//animate_put_ehw=0;
}
if(take_right_anim>0&&arm_right_angle_p2.tilt<=0)
{
ent_bonereset_branch(my,"arm_up_left");
ent_bonereset_branch(my,"arm_up_right");//delete this entry later
ent_animate(my,"t_rightehw_h",take_right_anim, ANM_ADD); // animiere das Modell (benutze "turn")
take_right_anim-=8*time_step;
}
if(take_right_anim<=33.33)
{
position_slot1_rightweap_p2=2;
}
if(take_right_anim<=0 && arm_right_angle_p2.tilt==0)
{
take_right_anim=0;
position_slot1_rightweap_p2=2;
}
}
//HERE IS IT HTE PROBLEM KOMBINATION
///////////////////////////////////////////////////////////////
//left1 &right1
if(slot_active_p2==1&&slotchange_var_p2==1&&slot1_lefthand_used_p2==1&&slot1_righthand_used_p2==1)
{
ent_bonereset_branch(my,"arm_up_left");
ent_bonereset_branch(my,"arm_up_right");
//TAKE
//NOTE: PICKUP and Take animation is the same
if(take_left_anim<100)
{
ent_animate(my,"t_leftehw_h",take_left_anim, ANM_ADD);
ent_animate(my,"t_rightehw_h",take_left_anim, ANM_ADD);
take_left_anim+=8*time_step;
}
if(take_left_anim>=100)
{
//BUG-Line
ent_bonereset_branch(my,"arm_up_left");
ent_bonereset_branch(my,"arm_up_right");//delete this entry later
//
take_left_anim=100;
position_slot1_leftweap_p2=1;
position_slot1_rightweap_p2=1;
ent_animate(my,"h_leftehw",1, ANM_ADD); // animiere das Modell (benutze "turn")
ent_animate(my,"h_rightehw",1, ANM_ADD); // animiere das Modell (benutze "turn")
}
if(arm_left_angle_p2.tilt!=camera2.tilt&&take_left_anim==100)//&&take_ehw_anim >=80
{
ent_bonerotate(my,"arm_up_left",arm_left_angle_p2);
arm_left_angle_p2.tilt+=30*time_step;
}
if(arm_left_angle_p2.tilt>=camera2.tilt+80&&take_left_anim==100)//&&take_ehw_anim >=80
{
arm_left_angle_p2.tilt=camera2.tilt+80;
}
//right angles
if(arm_right_angle_p2.tilt!=camera2.tilt&&take_left_anim==100)//&&take_ehw_anim >=80
{
ent_bonerotate(my,"arm_up_right",arm_right_angle_p2);
arm_right_angle_p2.tilt+=30*time_step;
}
if(arm_right_angle_p2.tilt>=camera2.tilt+80&&take_left_anim==100)//&&take_ehw_anim >=80
{
arm_right_angle_p2.tilt=camera2.tilt+80;
}
}
//PUTAWAY
/////////
if(slot_active_p2==0&&slotchange_var_p2==1&&slot1_lefthand_used_p2==1&&slot1_righthand_used_p2==1&&take_left_anim>0)
{
if(arm_left_angle_p2.tilt>=0&&arm_right_angle_p2.tilt>=0)
{
arm_left_angle_p2.tilt-=30*time_step;
arm_right_angle_p2.tilt-=30*time_step;
ent_bonerotate(my,"arm_up_left",arm_left_angle_p2);
ent_bonerotate(my,"arm_up_right",arm_right_angle_p2);
}
if(arm_left_angle_p2.tilt<=0&&arm_right_angle_p2.tilt<=0)//animate th take proces with tilt°
{
arm_left_angle_p2.tilt=0;
arm_right_angle_p2.tilt=0;
}
if(take_left_anim>0&&arm_left_angle_p2.tilt<=0)
{
ent_bonereset_branch(my,"arm_up_left");
ent_bonereset_branch(my,"arm_up_right");//delete this entry later
ent_animate(my,"t_leftehw_h",take_left_anim, ANM_ADD); // animiere das Modell (benutze "turn")
ent_animate(my,"t_rightehw_h",take_left_anim, ANM_ADD); // animiere das Modell (benutze "turn")
take_left_anim-=8*time_step;
}
if(take_left_anim<=33.33)
{
position_slot1_leftweap_p2=2;
position_slot1_rightweap_p2=2;
}
if(take_left_anim<=0 && arm_left_angle_p2.tilt==0 && arm_right_angle_p2.tilt==0)
{
take_left_anim=0;
position_slot1_leftweap_p2=2;
position_slot1_rightweap_p2=2;
}
}
//add her the weapons postions, it means
//position_slot1_leftweap_p2=1 //weapon is in the Hand
//position_slot1_leftweap_p2=2 //weapon is in the Holster
}
//some other arguments and functions
....
action player2()
{
p2=me;
my.scale_x=0.09;
my.scale_y=0.09;
my.scale_z=0.09;
set(my,POLYGON|CAST);
my.emask|=ENABLE_SHOOT|ENABLE_BLOCK|ENABLE_IMPACT|ENABLE_ENTITY;
vec_for_bone(head_angle_p2,my,"head");//set an ANGLE for the Head rotation
vec_for_bone(breast_angle_p2,my,"breast");//set an ANGLE for the Head rotation
camera2.pan=0;
camera2.tilt=0;
camera2.roll=0;
my.push=5;
my.health =100;
my.stamina =100;
my.fat =0;
my.force =1;
my.muscles =1;
my.jumphigh = 39;
my.ground=1;
var jump_possible=0;//allow only to jump if the player stands on the ground
var jumpcounter=0;//count the high the player is jumped
var jump_block=0;//the player has to wait a moment
var power_jump=4; //if the Player walks he could jump higher
draw_textmode("arial",1,15,100); //This sets the text messagesgind of Player2
while(p2.health>0)
{
health_p2=my.health; //calculate my.skills to vars for digits and outcast functions
ground_p2=my.ground;
///////////////////////////////////////////////////////////////
// DEFINES the Movement first
///////////////////////////////////////////////////////////////
human_gravity();
if((key_enter==1&&my.ground==1&&jump_block==0)||(jump_possible==1))//selvholding
{
jump_possible=1;
}
if(jump_possible==1&&jumpcounter<=my.jumphigh)
{
jumpcounter+=power_jump;
jump_block=50;
my.distanz_z=3*time_step;
if(key_cuu)
{
power_jump=2.75;
my.distanz_x=8*(key_cuu)*time_step;
}
else{power_jump=4;}
}
else
{
jump_possible=0;
jumpcounter=0;
my.distanz_x=5*(key_cuu-key_cud)*time_step;
my.distanz_y=5*(key_cul-key_cur)*time_step;
my.distanz_z=time_step*my.force_z;
jump_block-=1;
if(jump_block<=0)
{
jump_block=0;
}
}
distanz_p2.x=my.distanz_x;
distanz_p2.y=my.distanz_y;
distanz_p2.z=my.distanz_z;
c_move(my,distanz_p2,nullvector,IGNORE_PASSABLE|IGNORE_PUSH |GLIDE);
///////////////////////////////////////////////////////////////
// DEFINES the Animations
///////////////////////////////////////////////////////////////
//important-first animate the body and the legs before //animating the head or the arms
if(key_cuu-key_cud)
{
ent_animate(my, NULL, 0, 0);
walkanim_p2 += 6 * time_step;
ent_animate(my, "walk", walkanim_p2, ANM_CYCLE);
}
else
{
ent_animate(my, NULL, 0, 0);
standanim_p2 += 1 * time_step;
ent_animate(my, "stand ", standanim_p2, ANM_CYCLE);
}
if(key_cul-key_cur)
{
ent_animate(my, NULL, 0, 0);
walkanim_p2 += 6 * time_step;
ent_animate(my, "walk", walkanim_p2, ANM_CYCLE); /
}
if(key_e==1)
{
ent_bonereset_branch(my,"arm_up_left"); ent_bonereset_branch(my,"arm_up_right");
pushanim_p2 +=6 *time_step;
ent_animate(my, "punch", pushanim_p2, ANM_ADD);
}
if(!key_e)
{
pushanim_p2=0;
}
///////////////////////////////////////////////////////////////
// DEFINES the Angles
///////////////////////////////////////////////////////////////
camera2.pan-=8*(mouse_force.x)*time_step;
camera2.tilt+=8*(mouse_force.y)*time_step;
p2.pan=camera2.pan;
head_angle_p2.roll=0;
head_angle_p2.pan=0;
head_angle_p2.tilt=camera2.tilt;
ent_bonereset(my,"Head");
ent_bonerotate(my,"Head",head_angle_p2);
if(camera2.tilt>=90)
{
camera2.tilt=90;
} //The Player shouldn't see behind him self
if(camera2.tilt<=-81)
{
camera2.tilt=-81;
}//The Player shouldn't see through him self
//IMPORTANT Add all other Definitions and Funktions (Weapons) AFTER the Movement
//because the Weapons need an aktually Position to set
//This functions are for Salvemode,Automatic,halfautomatik
if(mouse_left==1) { lefthand_firemode_p2+=1; lefthand_firemode_p2 = maxv(lefthand_firemode_p2,0); }
if(mouse_left==0) { lefthand_firemode_p2=1; }
if(mouse_right==1) { righthand_firemode_p2+=1; righthand_firemode_p2 = maxv(righthand_firemode_p2,0); }
if(mouse_right==0) { righthand_firemode_p2=1;}
interactionssystem_p2();
vec_for_vertex(camera2.x,p2,735);
wait(1);
}
}
Sorry für den Aufsatz aber ich hoffe das es etwas gebracht hat und mir jemand helfen kann wenn ich mein Problem besser schildere!
Ich persönlich glaube es liegt am Script und nicht die Animation!
Danke schon mal für die Hilfe ^^