- Home /
Help with falling enemy Unity 3D
Hello everyone
I'm having difficulty with a player object forcing a enemy object to fall when it is trying to rise. I think this has to do with the basic player controller script giving the player artificial gravity rather than relying on the rigidbody.
I'm trying to have the player "mount" the enemy object and rise with it, but the player object does not rise and the enemy just shakes until the player is off of it. Once the player is not on top of the enemy, the enemy will rise.
Things I have tried: Disabling gravity for all objects involved(player still falls even when gravity is disabled) Made the player a child object (player just shakes but still falls) set the player to the transform of the enemy object when it becomes a child object (works for a short time, but same issue) set up transform vector3.up to set player above enemy object when it collides.
Here's some snippet of both codes to understand.
For the enemy:
void update() { if (Mounted == true) { jumperEnemyAI.transform.Translate(Vector3.up * Time.deltaTime); jumperEnemy_rb.useGravity = false; } }
for the player:
void Update() { // Apply gravity playerVelocity.y += gravityValue * Time.deltaTime;
pCon.Move(playerVelocity * Time.deltaTime);
// Ask controller if the player is grounded, make sure no negative velocity downward if so
groundedPlayer = pCon.isGrounded;
if (groundedPlayer && playerVelocity.y < 0)
{
playerVelocity.y = 0f;
}
// Getting out WASD/Arrow Key Values
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
Vector3 direction = new Vector3(horizontal, 0.0f, vertical).normalized;
// If we do have input move the player and rotate the model with Atan2
// Using SmoothDampAngle and rotTime we make the player gradually rotate rather than instantly
if (direction.magnitude >= 0.1f)
{
float rotation = Mathf.Atan2(direction.x, direction.z) * Mathf.Rad2Deg;
float rotSmooth = Mathf.SmoothDampAngle(transform.eulerAngles.y, rotation, ref rotSpeed, rotTime);
transform.rotation = Quaternion.Euler(0.0f, rotSmooth, 0.0f);
Vector3 moveDir = Quaternion.Euler(0.0f, rotation, 0.0f) * Vector3.forward;
pCon.Move(moveDir * speed * Time.deltaTime);
}
// Changes the height position of the player..
if (Input.GetButtonDown("Jump") && groundedPlayer)
{
playerVelocity.y += Mathf.Sqrt(jumpHeight * -3.0f * gravityValue);
}
}
any help is appreciated.
thanks