- Home /
Gravity for my AI
I am currently trying to implement gravity for my AI. What I have currently works but it doesn't reset when he lands because I'm struggling with CharacterController.isGrounded because it seems to vibrate between states when it's obviously grounded so I assume the problem is in my code. I will post the update function here and hopefully someone can help me out.
The actual gravity calculation is at the bottom of the code; I've left it all in for debugging purposes but it's not very long.
 void Update()
 {
     if(players.Count > 0 && canChangeTarget)
     {
         selectedTarget = players[Random.Range(0, players.Count)].gameObject;
     }
     if(!isAggro)
     {
         canChangeTarget = true;
         selectedTarget = null;
         //pathfind
     }else if(isAggro && selectedTarget != null)
     {
         lastActionDecayTimer -= Time.deltaTime;
         //attack
         //rotate the character
         if(character.isGrounded)
         {
             Quaternion rotation = Quaternion.LookRotation(selectedTarget.transform.position - transform.position);
             transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(0f, rotation.eulerAngles.y, 0f), turnSpeed * Time.deltaTime);
         }
         if(lastActionDecayTimer <= 0)
         {
             //start dropping aggro
             //if attacked, reset or does attack, reset lastActionDecayTimer
             attentionChangeTimer -= Time.deltaTime;
         }
         if(attentionChangeTimer <= 0)
         {
             //only change if not using an action eg attacking in a combo
             //only run this timer if no action has been performed for a set time
             attentionChangeTimer = attentionChangeTime;
             lastActionDecayTimer = lastActionDecayTime;
             canChangeTarget = true;
         }else
         {
             canChangeTarget = false;
         }
     }
     vSpeed += gravity * Time.deltaTime;
     Debug.Log(vSpeed);
     //move the character
     if(selectedTarget != null && character.isGrounded)
         moveDirection = new Vector3(transform.forward.x, vSpeed, transform.forward.z);
     else
         moveDirection.y -= vSpeed;
     character.Move(moveDirection * moveSpeed * Time.deltaTime);
 }
Your answer
 
 
             Follow this Question
Related Questions
2D Top Down Character being Pulled down and movement script not working? 2 Answers
Can't get gravity to work on Character Controller 2 Answers
controller.Move doesn't stay grounded when walking down slope 3 Answers
Unity AI character controller gravity 0 Answers
Round Planets and Movement on them 2 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                