hola expertos!
bueno, continuo trabajando en mi nuevo proyecto: a classical survival horror, que he posteado en el subforo de trabajos en procesos, pero ahora me encuentro estancado y llevo cerca de 3 días sin encontrar la solucionpara el problema que os planteo...
vereis, trabajo en UDK:
1-tengo mi Enemy Pawn y mi Enemi AI, y me ocurre un problema extraño... cuando el el niuvel empieza, el enemy pawn comienza a seguir al jugador, con su animacion d ecaminar, todo correcto.. pero al llegar al player, y cuando hace contacto con el, el enemigo se desplaza unas cuantas unidades bajo el suelo, cuando se pone en posicion de descanso...
a que es debido esto? tengo todas las animacione sperfectamente alineadas e importadas desde el ·d studio, tb, dentro del animset del enemigo, las naimaciones estan bien.. pero pq hace esop al chocar con el player?, ademas, al comenzar el nivel, si el enemigo no ve al player, este esta en posicion de descanso de manera correcta, sin traspasar el suelo y cuando comienza a nadar hacia el jugador, tb sigue ok.. repito, el problema solo está cuando hace losision con el player...
y el otro gran problema: como hago para que el enemigo ejecute la naimacion de ataque una vez toque al player? tengo en el script, que cuando el enemigo toca al player, suene el sonido de ataque, quite vida al player, pero no se como es la sentencia de animacion de atque (que tyb la tengo metidoa en el animtree de forma correcta, creo)
os dejo un enelace a mi blog, donde explico mejor esto y os pongo imagenes de las configuracion de animtree, así como los scripts del enemigo.
www.proyectofalconcrest.blogspot.com/
necesito vuestra ayuda! pq estoy obstinado con esto y hasta que no lo solucione no puedo avanzar! (o no quiero, ya que en todfos los proyectos, cuando llego a este punto, desperado, los termino dejando!!)
un saludo y gracias!
son problemas de coordenadas casi seguro.
Seguramente seapor el coloider ke hace de rigid body. Yo quitaria las fisicas rogid body entre el jugador y el enemy y usrtia el collider solo para detectar cuando se tocan.
al final conegui solucionar los dos temas:
1.el basetraslationoffset lo soluciones bajando el radio de los enemigos, aunq es un arreglo chapucero y seguro me da problemas despues con las aramas.
2.conegui controlar las niamciones!!
EL CODIGO DEL CONTROLLER AI:
class Zombie2Bot extends GameAIController;
var Pawn thePlayer;
simulated event PostBeginPlay()
{
super.PostBeginPlay();
PlaySound(SoundCue'Survival_SoundsMonsters.WAV.motel_monsters1_cue');
}
event SeePlayer(Pawn SeenPlayer)
{
if (thePlayer ==none)
{
thePlayer = SeenPlayer;
GoToState('Follow');
}
}
state Follow
{
Begin:
if (thePlayer != None)
{
MoveTo(thePlayer.Location);
GoToState('Looking');
}
}
state Looking
{
Begin:
if (thePlayer != None) // If we seen a player
{
MoveTo(thePlayer.Location); // Move directly to the players location
GoToState('Follow'); // when we get there
}
}
defaultproperties
{
}
EL CODE DEL PAWN
class Zombie2Pawn extends UTPawn
Placeable;
var Pawn P;
var() int DamageAmount;
var AnimNodeSlot test;
simulated event PostInitAnimTree(SkeletalMeshComponent SkelComp)
{
super.PostInitAnimTree(SkelComp);
if (SkelComp == Mesh)
{
test = AnimNodeSlot(Mesh.FindAnimNode('ESTADOS'));
}
}
simulated function PostBeginPlay()
{
super.PostBeginPlay();
//wake the physics up
SetPhysics(PHYS_Falling);
}
//over-ride epics silly character stuff
simulated function SetCharacterClassFromInfo(class<UTFamilyInfo> Info)
{
Return;
}
simulated event Bump( Actor Other, PrimitiveComponent OtherComp, Vector HitNormal )
{
`Log("Bump");
Super.Bump( Other, OtherComp, HitNormal );
if ( (Other == None) || Other.bStatic )
return;
P = Pawn(Other); //the pawn we might have bumped into
if ( P != None) //if we hit a pawn
{
if (Zombie2Pawn(Other) != None)
{
Return;
}
else
{
SetTimer(0.1, false, 'EatSlow');
}
}
}
simulated function EatSlow()
{
P.Health -= DamageAmount;
PlaySound(SoundCue'Survival_SoundsMonsters.Atack.Attack_ramdom');
PlaySound(SoundCue'Survival_SoundsMonsters.Atack.Attack_bite');
test.PlayCustomAnim('attack2', 1.0f, 0.1f, 0.1f, false, false, ); //Play attack animation
if (P.Health <= 0)
{
P.Destroy(); //kill it
}
}
defaultproperties
{
// Cylinder for navigation
Begin Object name=CollisionCylinder
CollisionHeight=+20.000000
CollisionRadius=+2.500000
End Object
Begin Object Name=WPawnSkeletalMeshComponent
Scale=2.5
SkeletalMesh=SkeletalMesh'Survival_monsters.Mesh.dino_SkeletalMesh'
PhysicsAsset=PhysicsAsset'Survival_monsters.Mesh.dino_Physics'
AnimSets(0)=AnimSet'Survival_monsters.Mesh.dino_AnimSet'
AnimtreeTemplate=AnimTree'Survival_monsters.Mesh.dino_AnimTree'
End Object
RagdollLifespan=180.0
JumpZ=0
AirSpeed=200
GroundSpeed=60
ControllerClass=class'Zombie1Bot'
bDontPossess=false
DamageAmount=10
WeaponSocket=linterna
WeaponSocket2=DualWeaponPoint
HeadBone=b_Head
PawnEffectSockets[0]=L_JB
PawnEffectSockets[1]=R_JB
}
luego ya es solo crear en animtree el ANIMNODESLOT y llamarlo ESTADOS, con dos children 1-para animaciones normales (move, idl, o lo q sea), 2-para ataque
inentare mirar eso q hablais de la colision, gracias!
saludos!