lunes, 31 de marzo de 2025

Enemigo

using UnityEngine;

public class EnemyFollow : MonoBehaviour
{
    public Transform player;         // Referencia al jugador
    public float moveSpeed = 5f;     // Velocidad de movimiento del enemigo
    public float rotationSpeed = 10f; // Velocidad de rotación del enemigo
    public float detectionRadius = 10f; // Radio de detección para perseguir al jugador
    public float attackRadius = 2f;   // Radio en el que el enemigo atacará al jugador
    private Rigidbody rb;            // Referencia al Rigidbody del enemigo
    private Vector3 randomTarget;    // Posición de destino aleatorio cuando no detecta al jugador
    private Animator animator;       // Referencia al Animator del enemigo

    void Start()
    {
        rb = GetComponent<Rigidbody>(); // Obtener el Rigidbody del enemigo
        animator = GetComponent<Animator>(); // Obtener el Animator del enemigo
        randomTarget = GetRandomTargetPosition(); // Obtener una posición de destino aleatoria
    }

    void Update()
    {
        // Verifica si el jugador está asignado
        if (player != null)
        {
            // Calcula la distancia entre el enemigo y el jugador
            float distanceToPlayer = Vector3.Distance(transform.position, player.position);

            // Si el jugador está dentro del radio de detección, el enemigo lo perseguirá
            if (distanceToPlayer <= detectionRadius)
            {
                // Calcula la dirección hacia el jugador
                Vector3 direction = player.position - transform.position;

                // Aseguramos que el enemigo no se mueva en el eje Y, solo en el plano XZ
                direction.y = 0;

                // Normaliza la dirección para mantener la velocidad constante
                direction.Normalize();

                // Mueve al enemigo hacia el jugador en el plano XZ (horizontal)
                transform.position += direction * moveSpeed * Time.deltaTime;

                // Hacer que el enemigo gire solo en el eje Y para mirar hacia el jugador
                Quaternion lookRotation = Quaternion.LookRotation(direction);
                transform.rotation = Quaternion.Slerp(transform.rotation, lookRotation, Time.deltaTime * rotationSpeed);

                // Si el enemigo está lo suficientemente cerca del jugador, atacar
                if (distanceToPlayer <= attackRadius)
                {
                    animator.SetTrigger("Attack"); // Dispara el trigger de la animación de ataque
                }
                else
                {
                    animator.SetBool("isWalking", true); // Activar animación de caminar
                }
            }
            else
            {
                // Si el jugador no está cerca, el enemigo se mueve aleatoriamente
                MoveRandomly();
            }
        }
    }

    // Detecta las colisiones
    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            // Aquí podrías aplicar una lógica para evitar que el enemigo y el jugador se junten.
            // Por ejemplo, puedes detener al enemigo o hacerlo rebotar ligeramente
            Vector3 pushDirection = transform.position - collision.transform.position; // Dirección opuesta al jugador
            rb.AddForce(pushDirection.normalized * 5f, ForceMode.Impulse); // Empujar al enemigo un poco hacia atrás
        }
    }

    // Método para mover aleatoriamente al enemigo cuando no está persiguiendo al jugador
    private void MoveRandomly()
    {
        // Genera una nueva posición aleatoria a la que el enemigo debe moverse
        if (Vector3.Distance(transform.position, randomTarget) < 1f)
        {
            randomTarget = GetRandomTargetPosition(); // Genera una nueva posición aleatoria
        }

        // Mueve al enemigo hacia la posición aleatoria
        Vector3 direction = randomTarget - transform.position;
        direction.y = 0; // Asegurarse de que solo se mueve en el plano XZ
        direction.Normalize();
       
        // Mueve al enemigo hacia la posición aleatoria
        transform.position += direction * moveSpeed * Time.deltaTime;

        // Hacer que el enemigo gire hacia la posición aleatoria
        Quaternion lookRotation = Quaternion.LookRotation(direction);
        transform.rotation = Quaternion.Slerp(transform.rotation, lookRotation, Time.deltaTime * rotationSpeed);
    }

    // Método para generar una nueva posición aleatoria dentro de un rango
    private Vector3 GetRandomTargetPosition()
    {
        float randomX = Random.Range(-10f, 10f);
        float randomZ = Random.Range(-10f, 10f);
        return new Vector3(randomX, transform.position.y, randomZ);
    }
}

Killzone

 using UnityEngine;

using UnityEngine.SceneManagement;

public class Killzone : MonoBehaviour
{
    private void OnCollisionEnter(Collision collision)
    {
if(collision.transform.CompareTag("Player"))
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);

}
    }

}

Figura 1 - Electiva 12°

jueves, 27 de marzo de 2025

Potenciómetro con Buzzer 11°

 

int salidaBuzzer =9;//Pin salida buzzer

int potenciometro = A0;// Pin de entrada potenciómetro

float lectura;//Lectura de potenciometro


//Frecuencias a las que osila el sonido

int FreqMin = 100; 

int FreqMax = 1000;


void setup() {

  pinMode(salidaBuzzer, OUTPUT);

  pinMode(potenciometro, INPUT);

}


void loop() {

  lectura = analogRead(potenciometro);

  float frecuencia = map(lectura, 0, 1023, FreqMin, FreqMax);

  tone (salidaBuzzer, frecuencia);

  delay(500);

}


#include <LiquidCrystal.h>

// LCD: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

int salidaBuzzer = 9;         // Pin salida buzzer
int potenciometro = A0;       // Pin de entrada potenciómetro

int FreqMin = 100;
int FreqMax = 1000;

void setup() {
  pinMode(salidaBuzzer, OUTPUT);
  pinMode(potenciometro, INPUT);

  // Inicializar LCD (16 columnas, 2 filas)
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Radiocuticula Frecuencia (Hz):");
}

void loop() {
  int lectura = analogRead(potenciometro);
  int frecuencia = map(lectura, 0, 1023, FreqMin, FreqMax);

  // Sonar el buzzer con esa frecuencia
  tone(salidaBuzzer, frecuencia);

  // Mostrar frecuencia en LCD
  lcd.setCursor(0, 1); // segunda fila
  lcd.print("Freq: ");
  lcd.print(frecuencia);
  lcd.print(" Hz   "); // Espacios para limpiar residuos

  delay(200); // Refresco
}




Factura

 



martes, 25 de marzo de 2025

Inventos e inventores revolución industrial

 https://ocw.unican.es/pluginfile.php/1317/course/section/915/OR-II.1.pdf

Taller revolución industrial


    ¿Según la siguiente información responde las preguntas a continuación con tú grupo de trabajo:

https://pinceladadehistoria.com/revolucion-industrial/

1.      ¿Cómo influenció la Revolución Industrial en el desarrollo de la tecnología y las máquinas de la época?

2.  Qué cambios sociales ocurrieron debido a la mecanización y el uso de máquinas durante la Revolución Industrial?

3.      En la Revolución Industrial, la producción pasó de ser artesanal a mecanizada. ¿Cómo crees que la automatización de procesos a través de Arduino podría replicar este fenómeno en una máquina futurista?

4.      ¿Cómo crees que las innovaciones tecnológicas, como la máquina de vapor y el ferrocarril, podrían inspirar el diseño de un sistema automatizado en una máquina moderna?

5.      La Revolución Agrícola permitió que la producción alimentaria creciera y, a su vez, impulsó la Revolución Industrial. ¿Cómo podríamos usar tecnologías modernas como Arduino para optimizar procesos en la agricultura del futuro?

6.      ¿Cuáles son las similitudes entre los avances tecnológicos de la Revolución Industrial (por ejemplo, la máquina de vapor) y las tecnologías actuales que usamos en el prototipado rápido, como Arduino?

7.      Si tuvieras que diseñar una máquina que represente la fusión entre la Revolución Industrial y la tecnología moderna, ¿qué componentes de Arduino utilizarías para simular el funcionamiento de una máquina de vapor o un ferrocarril?

8.      ¿Qué desafíos sociales y económicos crees que podrían surgir al construir una máquina futurista inspirada en la Revolución Industrial?

9.      La Revolución Industrial cambió la manera en que trabajamos y vivimos. ¿Cómo crees que una máquina futurista, creada con Arduino, podría mejorar la vida urbana o industrial en el futuro?

10. Durante la Revolución Industrial, la máquina de vapor fue un hito tecnológico. ¿Cómo crees que podríamos replicar este avance en el futuro utilizando tecnologías como Arduino, sensores y motores para crear una máquina de energía autónoma?

11. La industrialización masiva aumentó la producción, pero también desplazó a muchos trabajadores. ¿Cómo podríamos usar la robótica o la automatización (a través de Arduino) para optimizar la producción sin afectar tanto al empleo?

12. ¿Qué aplicaciones actuales de la tecnología podrían haber sido impensables sin los avances que trajo la Revolución Industrial, y cómo podemos integrarlas con Arduino para crear una máquina inspirada en el pasado, pero con un enfoque hacia el futuro? 

jueves, 20 de marzo de 2025

GAME MANAGER

 using UnityEngine;

using TMPro;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour
{
    public AudioSource audioSource;
    public TMP_Text collectiblesNumbersText;  // Para mostrar los coleccionables recogidos
    private int collectiblesNumber;

    public TMP_Text totalCollectiblesNumbersText;  // Para mostrar el total de coleccionables
    private int totalCollectiblesNumber;

    void Start()
    {
        // Asignar el total de coleccionables (los objetos hijos en la escena)
        totalCollectiblesNumber = GameObject.FindGameObjectsWithTag("Collectible").Length;
        totalCollectiblesNumbersText.text = totalCollectiblesNumber.ToString();  // Mostrar el total en el UI
        collectiblesNumbersText.text = collectiblesNumber.ToString();  // Mostrar los coleccionables recogidos (inicialmente 0)
    }

    void Update()
    {
        if (transform.childCount <= 0)  // Si no quedan más coleccionables
        {
            Debug.Log("Win");
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);  // Cargar la siguiente escena
        }
    }

    public void AddCollectible()
    {
        audioSource.Play();  // Reproducir sonido al recoger un coleccionable
        collectiblesNumber += 1;  // Incrementar el número de coleccionables recogidos
        collectiblesNumbersText.text = collectiblesNumber.ToString();  // Actualizar el texto de los coleccionables recogidos
    }
}

COLLECTIBLE

using UnityEngine;

public class Collectible : MonoBehaviour
{
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))  // Verifica que el objeto con el que colisiona es el jugador
        {
            GameManager gameManager = FindObjectOfType<GameManager>();
            if (gameManager != null)
            {
                gameManager.AddCollectible();
            }

            // Destruir el objeto collectible
            Destroy(gameObject);
        }
    }
}







miércoles, 12 de marzo de 2025

Taller electiva 10°

Objetivos de la sesión remota

  • Hacer una lluvia de ideas sobre posibles elementos que pueden agregar a su juego (nuevos personajes, escenarios, objetos interactivos, etc.).
  • Planificar cómo serán las próximas fases de su desarrollo del juego.
  • Avanzar en el diseño del juego (sin necesidad de tener Unity abierto).

1.      Responder a las siguientes preguntas:

  • ¿Qué tipo de personajes podrían agregar? (Considerar aspectos como habilidades, poderes, apariencia, historia de fondo).
  • Ideas para niveles o escenarios dentro del juego.
  • ¿Qué objetos interactivos pueden implementar? (Ejemplo: cofres, plataformas móviles, enemigos, obstáculos, etc.).

Proponer mecánicas del juego

  • ¿Cómo será el sistema de puntuación?
  • ¿Habrá un sistema de vida o salud? ¿Cómo se manejan las derrotas o victorias?
  • Definir cómo será la jugabilidad de forma general.

Pensar en interacciones específicas

·         ¿Cómo interactúa el jugador con los objetos o enemigos?

      ·         ¿Qué debe hacer el jugador para ganar puntos, desbloquear niveles, o mejorar su personaje?

 2.      Diseñar un storyboard o diagrama de flujo del juego

 ·         Crear un esquema visual con las principales escenas o pantallas de su juego (por ejemplo, inicio, niveles, fin de juego).

 ·         Pensar en cómo los jugadores avanzarán en el juego: ¿Qué pasa al comenzar? ¿Cómo se navegan los niveles?

Instrucciones: Usar herramientas como Google Drawings, PowerPoint o incluso papel y lápiz para dibujar el flujo de las acciones del juego.

Ideando nuestra entrevista. El Storyboard - Econococo