Beispiel #1
0
    void Update()
    {
        if (player == null)
        {
            Transform playerObject = GameObject.FindGameObjectWithTag("Player").transform;
            if (playerObject == null)
            {
                return;
            }

            player = playerObject.GetComponent <Player>();
        }

        transform.position = player.GetPosition();
        var enemyLocator = serviceLocator.GetEnemyLocator();
        var nearestEnemy = enemyLocator.GetNearestEnemyFromTheEntity(player);

        if (nearestEnemy == null)
        {
            return;
        }

        var angleToNearestEnemy = RotationHelper.GetAngleFromToTarget(player.GetPosition(), nearestEnemy.GetPosition());
        var newAngle            = Mathf.Lerp(transform.rotation.eulerAngles.z, angleToNearestEnemy, 0.5f);

        transform.rotation = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, newAngle);
    }
Beispiel #2
0
    void FixedUpdate()
    {
        if (target == null)
        {
            target = GameObject.FindGameObjectWithTag("Player").transform;
            if (target == null)
            {
                return;
            }
        }

        var   myAngle       = RotationHelper.GetAngleFromQuaternion(transform.rotation);
        var   angleToTarget = RotationHelper.GetAngleFromToTarget(transform.position, target.position);
        var   diff          = RotationHelper.GetDifferenceBetweenAngles(myAngle, angleToTarget);
        float nextAngle     = transform.rotation.eulerAngles.z;

        if (diff > 0)
        {
            var mod = turnSpeed * Time.fixedDeltaTime;
            if (mod > diff)
            {
                mod = diff;
            }
            nextAngle += mod;
        }
        else if (diff < 0)
        {
            var mod = turnSpeed * Time.fixedDeltaTime;
            if (mod < diff)
            {
                mod = diff;
            }
            nextAngle -= mod;
        }

        myRigidBody.MoveRotation(nextAngle);

        moveScript.Move(Time.fixedDeltaTime);
    }