Beispiel #1
0
    // Update is called once per frame

    void FixedUpdate()
    {
        // Aiming
        Ray        ray       = Camera.main.ScreenPointToRay(Input.mousePosition);
        int        layerMask = LayerMask.GetMask("Destroyable", "Enemy", "Terrain");
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, 100f, layerMask))
        {
            Vector3 mousePos = hit.point;
            Vector3 offset   = Vector3.zero;

            int dl = LayerMask.NameToLayer("Destroyable");
            int el = LayerMask.NameToLayer("Enemy");
            if (hit.collider.gameObject.layer != dl && hit.collider.gameObject.layer != el)
            {
                // We are aiming at something we don't really need to hit, so just aim straight to the side
                float weaponYOffset = weapons.CurrentWeapon.transform.position.y - transform.position.y;
                offset.y = weaponYOffset;
            }

            weapons.AimAt(mousePos + offset);

            mousePos.y = transform.position.y;
            transform.LookAt(mousePos);
        }

        float h = movement.x;
        float v = movement.z;

        ray = new Ray(transform.position, Vector3.down);
        if (Physics.Raycast(ray, out hit, 0.2f))
        {
            grounded = true;
        }
        else
        {
            grounded = false;
        }

        Animating(h, v);
    }