void Update() { var characterMoveBehaviour = MoveComponent; if (!characterMoveBehaviour.IsMoving) { if (modelAnimaitonState != ModelAnimationState.Idle) { animatorComponent_model.SetTrigger("Idle"); modelAnimaitonState = ModelAnimationState.Idle; } return; } //if the distance between the character and the center of the next tile is short enough var position_plane = characterMoveBehaviour.NextDestination; position_plane.y = 0; var my_position_plane = transform.position; my_position_plane.y = 0; if ((position_plane - my_position_plane).magnitude < MinNextTileDist) { characterMoveBehaviour.MoveDestinationReached(); } MoveTowards(characterMoveBehaviour.NextDestination); }
internal override void TemplateAfterAwake() { animatorComponent_indicator = GetComponent <Animator>(); animatorComponent_model = gameObject.FindComponentInChildWithTag <Animator>("Model"); myTransform = transform; Speed = 4; RotationSpeed = 2; MinNextTileDist = 0.5f; modelAnimaitonState = ModelAnimationState.Idle; }
void MoveTowards(Vector3 position) { var rotationSpeed = RotationSpeed; var speed = Speed; Vector3 dir; CharacterController CC = GetComponent <CharacterController>(); Vector3 myPos = CC.GetComponent <Collider>().bounds.center; position.y = myPos.y; dir = position - myPos; // Rotate towards the target myTransform.rotation = Quaternion.Lerp(myTransform.rotation, Quaternion.LookRotation(dir), rotationSpeed * Time.deltaTime); // Modify speed so we slow down when we are not facing the target Vector3 forwardDir = myTransform.forward; //Move Forwards - forwardDir is already normalized forwardDir = forwardDir * speed; float speedModifier = Vector3.Dot(dir.normalized, myTransform.forward); forwardDir *= Mathf.Clamp01(speedModifier); float speedModMin = 0.97f; if (speedModifier > speedModMin) { CC.SimpleMove(forwardDir); //@#$ test daca deja face miscarea asta if (modelAnimaitonState != ModelAnimationState.Move) { animatorComponent_model.SetTrigger("Move"); modelAnimaitonState = ModelAnimationState.Move; } } }