Jump to content

Search the Community

Showing results for tags 'c#'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • General
    • Proyectos
    • Offtopic
    • Unity Feeds
    • Website
    • Youtube
  • Mesa de ayuda
    • Unity
    • Arte
    • Builds & Dispositivos
    • Otras Especialidades
  • Aportes de la Comunidad
    • Recursos
    • Eventos
  • Bolsa de trabajo & Colaboraciones
    • Ofertas y Demandas
  • Post Antiguos
    • General (Antiguo)

Blogs

There are no results to display.

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Especialidad

Found 60 results

  1. Buenas! soy Augusto de Chime Ayer comencé un canal dedicado a Unity y C# y largue con una serie de introducción a la programación en Unity. En el primer episodio simplemente vemos como instalar UnityHub y Visual Studio para dejar todo listo para el siguiente episodio: En el segundo creamos nuestro primer Hola Mundo en Unity, y vemos el concepto de variables con varios ejemplos. Ademas hice otro video suplementario que cubre varios temas básicos como para tener una buena base en Unity antes de empezar la serie Espero que les guste el contenido, voy a estar subiendo los siguientes capitulos a lo largo del mes!
  2. Bueno, eso, si alguno tiene algun video tutorial o algo, porque estoy perdidisimo, de antemano muchas gracias
  3. Bueno, basicamente es lo que dice en el titulo, solo queria saber si alguno sabe una forma para crear un "If" que se active solo si la rotacion de un objeto es mayor a 20°, gracias 😄
  4. Hola, basicamente hice que la camara siguiera a mi personaje con un mini retraso de 0.15 segundos para hacerlo mas comodo y no tan estatico, el problema? Que cuando el personaje se mueve pareciera como que va fotograma por fotograma y no de manera fluida, si le saco el SmoothDamp se ve bien, pero yo lo quiero para hacerlo mas comodo, alguien sabe como hacer que el SmoothDamp sea mas nitido/fluido?? Pense en algun Time * deltaTime, pero no me funciono del todo asi que ya no se como podria hacerlo mas nitido public class Camara : MonoBehaviour { public GameObject Follow; public Vector2 minCamPos, maxCamPos; public float smoothTime; private Vector2 velocity; float size = 34.748234f; bool MaxSize = true; bool MinSize = true; // Start is called before the first frame update void Start() { gameObject.GetComponent<Camera>().orthographicSize = size; } // Update is called once per frame void Update() { if (gameObject.GetComponent<Camera>().orthographicSize > 8.1) { smoothTime = 1.4f; size = gameObject.GetComponent<Camera>().orthographicSize = size + -0.15f; } if (gameObject.GetComponent<Camera>().orthographicSize < 8.09) { smoothTime = 0.2f; } float posX = Mathf.SmoothDamp(transform.position.x, Follow.transform.position.x, ref velocity.x, smoothTime); float posY = Mathf.SmoothDamp(transform.position.y, Follow.transform.position.y, ref velocity.y, smoothTime); transform.position = new Vector3( Mathf.Clamp(posX, minCamPos.x, maxCamPos.x), Mathf.Clamp(posY, minCamPos.y, maxCamPos.y), transform.position.z); if (Input.GetKey("p") && MaxSize) { size = gameObject.GetComponent<Camera>().orthographicSize = size + 0.1f; } if (Input.GetKey("o") && MinSize && size < 8.1) { size = gameObject.GetComponent<Camera>().orthographicSize = size + -0.1f; } if (size < 8) { MaxSize = true; } else if(size > 8) { MaxSize = false; } if (size < 2.351392) { MinSize = false; } else if (size > 2.351392) { MinSize = true; } } } No me deja editar el codigo para aclarar que hace cada cosa, lo edito y no se guarda o yo no lo veo guardado, los primeros 2 ifs hacen un acercamiento de camara inicial, luego es el codigo de seguimiento y el resto de Ifs es para alejar y acercar la camara con dos botones
  5. Hola, lo puse en el anterior post, pero como es urgente prefiero dedicarle un post propio, el punto es, dentro de Unity ejecuto mi juego y funciona perfectamente este objeto en cuestion, pero cuando lo Buildeo y lo ejecuto fuera de Unity falla por completo y no sirve, alguien sabe por que es?? Si funciona dentro de Unity es porque esta bien puesto el codigo, verdad?
  6. Muy buenas tardes a todos, primero que nada, soy muy novato en Unity, pero con muchas ganas de aprender, ahora estoy tratando de hacer un videojuego acerca de una pandemia(Covid-19) y me he quedado bloqueado varios días en una parte la cual es: Una persona infectada camina por una ruta, y al colisionar con otras personas dentro de un radio establecido pueda contagiarlas y estas personas contagiadas a su vez puedan transmitir la enfermedad igualmente(Activo un Sistemas de partículas cuando una persona se halla contagiado) y así mismo si existe una colisión con personas no contagiadas que no pase nada. He intentado poner en cada persona un SpheraCollider con un radio de 2 y esta a su vez que se active con un TriggerEnter cuando colisiona con otra persona, pero no se me ocurre como transmitir el contagio. Probé en hacer una Lista de tipo Persona con una variable boolean infected con su constructor. Mil disculpas por las molestias, ¿Alguien me puede dar alguna idea de que hacer? Muchas gracias.
  7. Hola! Hacía bastante tiempo que no escribía en mi blog y este fin de semana me he animado. Para quien le pueda interesar, dejo por aquí este tutorial recién sacado del horno sobre Unit Testing en Unity y cómo usar la herramienta Test Runner: https://histeriagamedev.wordpress.com/2020/06/20/unit-testing-en-unity/ Espero que os guste y, si es así, difundid a quien queráis:) Saludos!
  8. Buenas tardes, estoy buscando algún libro sobre desarrollo de videojuegos 3D con Unity y él encontró algunos, pero no son relativamente baratos y tampoco quiero llevarme un chasco al comprarlo y ver qué explica cosas muy básicas u orientadas solo a 2D, por lo que me gustaría que me aconsejasen antes de realizar la compra y el paso si se recomienda más, acumular aquí una lista de todos los libros de programación en C # que conozcamos. ¿Que les parece este ?: https://www.casadellibro.com/libro-unity-3d/9788426726827/8858207 También le he echado el ojo a este otro: https://www.casadellibro.com/libro-unity-aprende-a-desarrollar-videojuegos/9788494897283/10278827 Un saludo y gracias.
  9. ¡Hola a todos! Tengo un problemilla a ver si alguien me hecha un cable: Estoy intentando hacer unas marcas de derrape para un coche. Para ello utilizo un trail renderer. Todo bien me lo dibuja en el suelo. El problema es que también me lo dibuja también en el aire cuando el coche da un salto. Para cada marca de derrape tengo un objeto vacío pegado a la rueda con un collider, que me sirve para detectar con el código C# si el collider entra o sale del contacto con el collider del suelo (tag "suelo". - Cuando se activa el trigger collider suelo, el objeto con el trail renderer cambia a la capa 0 (para que lo vea y muestre la cámara). - Cuando sale del collider suelo, el objeto con el trail renderer cambia a la capa 8 (que he creado para que no lo vea ni muestre la cámara). Entonces: Cuando el coche sale del colider del suelo de una rampa, cae de un puente por ejemplo, el trail renderer desaparece mientras el coche se mantiene y cae en el aire. Pero en cuanto toca el suelo, aparece todo el trail renderer y a mi me gustaría que sólo estuviese dibujado en el suelo. (no sé cómo hacer esto) He intentado hacer que solo se dibuje al entrar en un collider, cambiando la capa visible por la cámara. pero cuando llega al collider del suelo, se activa la capa visible para el trail renderer, pero me aparecen todo los rastros por detrás en el aire como en la imagen. ¿Alguna idea de cómo solucionar esto? Gracias
  10. Hola, muy buenas a todos compañeros. Quiero realizar una consulta a la comunidad, ya que no tengo muy claro cómo puedo lograr que este código, instancie un GameObject (en este caso un misil) hacia el collider (Other) que entra dentro del Trigger. Hasta el momento, puedo instanciar el misil hacia adelante (leftSide.up) cuando algún objeto con collider entra dentro del Trigger (Un Box Collider 2D). Pero mi intención es que el misil se dirija hacia la posición del GameObject que acaba de entrar (Sí, que lo persiga). En resumen, UN MISIL GUIADO. Todo el código dentro del "if" se cumple, el objeto se instancia, y se aplica el Addforce hacia adelante: (Es un juego 2D) void OnTriggerStay2D(Collider2D Other){ if (currentTime >= timeBetweenSide && playerController.selecS && playerController.launchSide && instantiateSide1 && playerController.sideCount > playerController.minSideWinder) { GameObject side = Instantiate (sideWinder, leftSide.position, myTransform.rotation) as GameObject; Rigidbody2D sidePhysics = side.GetComponent<Rigidbody2D> (); sidePhysics.AddForce (leftSide.up * Time.deltaTime * 2000, ForceMode2D.Impulse); currentTime = ; } } He probado código, pero hasta ahora no logro nada, por eso dejo aquí el básico, Addforce hacia adelante, para ver que ideas nuevas me pueden brindar. Lo hago dentro de OnTriggerStay2D, para simular el rango de disparo del misil, si no está dentro del Trigger, no se puede disparar. Gracias de antemano, por dedicar tiempo en ayudar a este "desarrollador" atorado.
  11. Tengo un problema con este codigo, quiero que se pueda realizar con un bool pero sin que se crashee private AsyncOperation oo; public bool Open = false; public bool WithCollider; public int levelToLoad; void Start () { } void OnGUI() { if (Open) { if (GUI.Button(new Rect(Screen.width / 2 - 100, Screen.height / 2 - 15, 200, 30), "Load Level")) { oo = SceneManager.LoadSceneAsync(levelToLoad); } if (oo != null) { GUI.Box(new Rect(0, Screen.height - 40, oo.progress * Screen.width, 40), ""); } } } cada vez que le pongo un bool en vez de Probe haciendo asi: void Update (){ if(Open){ oo = SceneManager.LoadSceneAsync(levelToLoad); } }pero al cargar me ase una cosa media rara y no se como areglarlo si alguien pudiera pobrar el codigo y ayudarme me arian un favor grandisimo
  12. HOla a todos. deso instanciar por codigo un NPC que personifica a un sabio galáctico, de tal manera que las coordenadas del NPC en el momento de instanciarse esten del jugador a + 50 unidades hasta + 70 unidades en el eje x y en el mismo rango en el eje z (la distancia exacta se define randómicamente en ambos ejes). El jugador posee un collider esferico de de 0.5 u de radio y su escala es de 10 u en cada uno de los tres ejes., cuando el codigo instancia al sabio lo hace chocando el collider por lo cual concluyo que lo hace en en valores de coordenadas a los que deseo. Adjunto el código para ver donde esta el error. Muchas gracias a todos aparecedorSabios.js
  13. Lo preguntáis bastante, así que lo mejor es verse este vídeo para darse cuenta de que programar un script de C# en unity no supone ninguna dificultad. De hecho, facilita bastante las cosas. https://unity3d.com/pt/learn/tutorials/modules/beginner/scripting/c-sharp-vs-javascript-syntax Más ayudas: http://answers.unity3d.com/questions/12911/what-are-the-syntax-differences-in-c-and-javascrip.html Moraleja: Perdedle el miedo a programar en C# , si queréis aprovechar todo el potencial que ofrece Unity, en especial los CustomEditor.
  14. Hola gente, que tal estan? Veran, estoy intentando hacer una script simple que, al entrar en un trigger, me sume un numero a una UI text, es para un juego en el que, si caes de una plataforma te teletransportas de nuevo arriba pero quiero que cuente una caida para ver cuantas tienes al terminar el nivel
  15. Buenas a todos otra vez! aki me hallo "empollándome" el asuntillo de la serialización para persistencia de datos... (aún llevo poco tiempo, de ahí mi ignorancia en todo este tema) Después haberme pasado por el hilo reciente: http://unityspain.com/topic/35649-como-guardar-las-variables-del-juego/ y de haberme hecho el live training: https://www.youtube.com/watch?v=J6FfcJpbPXE , así cómo haber leído alguna que otra página de referencia como la propia de Microsoft... he conseguido replicar el ejercicio del live training y repetirlo en un proyecto de prueba a parte sin problemas. La mécanica no parece especialmente complicada en un ejercicio básico, pero a la hora de aplicarlo a un proyecto de verdad... se ve desesperante hasta la muerte.. la pregunta es... mi proyecto es un juego de estrategia de tipo tablero (sin animaciones ni texturas, ni fichas), en el que tan sólo hay una serie de esferas (interactuables) que son las que cargan con gran parte de los scripts (la mayor parte de información se encuentra en ellas), que a su vez interactuan a demanda... El problema es la cantidad de objetos a serializar... Siendo un juego de estrategia, podréis imaginar que me puedo encontrar una cantidad desmedida de variables a guardar... ¿No es posible guardar todos estos elementos en un único GameObject vacío y serializarlo? (o algo parecido) Sé que la vaguería no comulga bien con la programación , pero maaaadreee.... imagino que de poder, no sería la mejor de las prácticas a nivel estructura de programación (si no, todo el mundo haría esto y se olvidarían de tanto trabajo, digo yo), pero es que me veo serializando variables hasta el fin de mis días... ¿Tengo esperanza o me rezo un "padre nuestro" ?? ¡Gracias! PD: la información que manejo entre los scripts son esencialmente números, boleanos y texto
  16. Buenas tardes! Quiero hacer un juego en C# o Javascript con Unity, que utilice tecnología NFC, usando mi teléfono móvil como lector. Para ello, también tendré que crear una base de datos que contenga la información de cada tarjeta NFC y un servicio web que conecte todo esto con mi aplicación. Mi pregunta es: ¿es posible? Y si lo es, ¿cómo? Antes de nada quiero aclarar que estoy un poco verde en esto. Este será además mi primer proyecto "real". No paro de buscar por Internet y no encuentro nada al respecto que diga las cosas claramente. Un saludo y gracias de antemano
  17. ¡Hola! Veréis: estoy absolutamente desquiciado con el comportamiento de ubicación de botones y demás historias. Resulta que tengo un menú y un submenú. Lo que hago es cambiarlos de posición a golpe de click en el botón. El problema es que la línea que define la reubicación del submenú me da dos resultados diferentes según la coloque en la función Update o en la función dedicada (la que se activa con el botón), siendo la primera la que arroja el resultado adecuado. ahí va el código de marras. using UnityEngine; using System.Collections; using UnityEngine.UI; public class Menu : MonoBehaviour { public GameObject centerScreen; public GameObject subMenu; public GameObject subMenuOriginal; public Transform subMenuNew; public GameObject altMenu; public GameObject altMenuNew; void Start () { altMenu.transform.position = subMenuNew.transform.position; } void Update () { altMenu.transform.position = altMenuNew.transform.position; } public void HideMainMenu() { // altMenuNew.transform.position = altMenu.transform.position; centerScreen.transform.position = subMenu.transform.position; subMenu.transform.position = subMenuNew.transform.position; // altMenu.transform.position = altMenuNew.transform.position; } public void CloseMainMenu () { subMenu.transform.position = centerScreen.transform.position; altMenu.transform.position = subMenuNew.transform.position; subMenuNew.transform.position = altMenuNew.transform.position; } } donde altMenu es el menu (conjunto de botones ) a desplazar y altMenuNew es un GO vacío que utilizo como refencia de destino (lugar de reubicación). Siendo el resultado de "altMenu.transform.position = altMenuNew.transform.position; " diferentes en void Update() y void CloseMainMenu() , no acabo de hallar explicación a esto y me está volviendo loco. Intuyo que la respuesta podría (¿Qué, si no?) estar relacionada con la lectura a cada frame de Update() , puesto que entiendo(en mi supina ignorancia) que es la única diferencia entre las dos funciones...(¿Estoy equivocado?) El caso es que necesito que esta línea no se esté ejecutando contínuamente: no es una función principal, sino puntual (pero que debe estar disponible, evidentemente). ¿Alguien que me pueda ayudar entender el por qué de esta doble respuesta? ¿Qué está pasando? ¡Muchas gracias!
  18. Llevo bastantes días estrujándome el cocotero y no se me ocurre cómo sacarlo, así que os lo explico por aquí todo, en busca de opiniones: -Estoy creando una Clase genérica de myTimer, para crear y actualizar cualquier tipo posible de contador/Timer en un juego, independiente del género que sea. Es decir, trato de crear un contenedor que permita crear en tu escena o en tu juego, un contador. Para hacerlo todavía más genérico, he decidido catalogarlos de la siguiente forma: Interminable. El contador empieza desde cero, y sólo se pausa cuando se para el juego, continuando en cada sesión. Llevas jugadas 500 horas...Reloj. El contador empieza en 0, y cuando llega a cierto valor, se resetea y comienza de nuevo, y así indefinidamente. Cada 500 seg, aparecerá un enemigo.Alerta. El tipo de contador más conocido; cuando el contador llegue a cierto valor, se dispara el evento. No podrás volver a disparar hasta que pasen 10 segs.CuentaAtrás. Simple variación de la Alerta, pero en la que la cuenta va hacia atrás, y siempre se para en 0. La bomba estallará en 30 segs! Con ésto y unas pocas propiedades más, ya tengo mi clase. Lo ideal es tener acceso al estado actual de cada contador, para presentar la clásica barra de progreso,etc, y recibir y mandar eventos conforme ese contador ha terminado y debe ser destruído, pausado, o lo que sea... Ahora le toca el turno al Manager, que simplemente es un Script Monobehaviour, que guardará una lista global de objetos de tipo myTimer. Por tanto, he querido separarlo todo en 2 scripts: Clase normal myTimer, que debe crear, alojar y gestionar un objeto de tipo myTimer, o sea un contador. No quiero que herede de Monobehaviour.Script TimersManager, de tipo Monobehaviour, que mantiene una lista de objetos myTimer. El objetivo principal del Manager es gestionar globalmente la LISTA de contadores y recibir notificaciones de cada objeto. Por lo tanto, lo correcto sería dejar que la propia Clase sea la que gestione el estado del contador, tras ser creado. Eso es ser eficiente. Y aquí es dónde aparece el problema. Quiero que sea la propia Clase la que actualice el objeto. Pero ocurre lo siguiente: InvokeRepeating NO es eficiente (pica mucha CPU) y es una función que requiere estar heredando de MonoBehavior. Time.deltaTime + valor--, no es ni eficiente ni fiable, pero podría funcionar y me daría control sobre cómo va pasando ese tiempo. Pero puede provocar errores.StartCoroutine + IEnumerator sí son eficientes, pero también requieren heredar de MonoBehavior, y sólo devuelven cuando acaban. Por tanto, no puedo usarlos en la Clase.System.Timer.CreateTimer() es lo más eficiente según C#, pero también depende de MonoBehaviour, y además genera errores de API en Unity. Así es cómo estoy, con la duda constante de por cuál de estos métodos me decido y, por lo tanto, qué cambios hago en la clase y en el Manager para adaptarlos. Imaginad un metroidvania o un Ogame o CookieClicker en el que tengo que estar gestionando tranquilamente 200 contadores. La decisión no es nada fácil... ¿Algún consejo de qué hacer?
  19. Tengo un problema, quiero que cuando gaste mana despues de un sierto tiempo recupere el mana poco a poco y no se como hacerlo porque cuando lo ago o no suma o suma rapidicimo y me llega a miles si me podrian ayudar fuera genial
  20. Muy buenas a todos tengo un problema extrano tengo este codigo para la vida public int curHealth; public int maxHealth = 100; void start (){ curHealth = maxHealth } pero tengo un problema quiero que mantenga una vida que si la pierde que se mantenga perdida, pero al usar el codigo este cada vez que inicia un nivel va a ser 100 pero si no lo tengo a iniciar por primera vez el juego no tendra vida y no se como platearmelo... Grasias por su atencion
  21. Hola tengo un problema que no puedo solucionar, mi proyecto es un shooter TPS/FPS multijugador, puedo conectar a los jugadores y sincronizar movimiento y animaciones pero cuando creo las armas vienen los problemas. cuando inicio una partida todo bien crea a mi jugador y las armas en red. todo perfecto. al conectar un cliente a la partida en el servidor también parece todo bien las armas se generan y se equipan al cliente. pero del lado del cliente los jugadores que ya estaban allí aparecen pero las armas se quedan flotando y no se asignan al jugador. mi primer script se encarga de instanciar las armas y asignarlas cuando se crea el jugador. using UnityEngine; using System.Collections; using UnityEngine.Networking; public class NetPlayerSetup : NetworkBehaviour { [SyncVar] public string playerNetID; [SerializeField] cameraViewMove playerCam; public GameObject primaryWeapon; public GameObject secundaryWeapon; //weaponManager wManager; ShooterController shooterController { get { return GetComponent<ShooterController>(); } } playerController pController { get { return GetComponent<playerController>(); } } ikController ikControl { get { return GetComponent<ikController>(); } } //aimingController aimControl; Animator anim; // Use this for initialization void Start () { if (isServer) { playerNetID = "Player" + Random.Range(1, 1000); } if (isLocalPlayer) { pController.enabled = true; ikControl.enabled = true; //aimControl.enabled = true; playerCam = GameObject.FindGameObjectWithTag ("PlayerCam").GetComponent<cameraViewMove> (); playerCam.setupPlayer(gameObject); shooterController.enabled = true; CmdInstantiateWeapons(); } else { NetworkIkSync netIk = GetComponent<NetworkIkSync>(); netIk.enabled = true; } Debug.Log("Net Player Inicializado"); //finish } [Command] public void CmdInstantiateWeapons(){ //GameObject primary = GameObject.Instantiate (primaryWeapon) as GameObject; //GameObject secundary = GameObject.Instantiate (secundaryWeapon) as GameObject; GameObject primary = Instantiate(primaryWeapon, primaryWeapon.transform.position, primaryWeapon.transform.rotation) as GameObject; GameObject secundary = Instantiate(secundaryWeapon, secundaryWeapon.transform.position, secundaryWeapon.transform.rotation) as GameObject; NetworkServer.Spawn(primary); NetworkServer.Spawn(secundary); RpcEquipWeapons(primary, secundary); } [ClientRpc] public void RpcEquipWeapons(GameObject prymary, GameObject secundary){ shooterController.primaryWeapon = prymary; shooterController.secundaryWeapon = secundary; shooterController.unEquip(); shooterController.equip(weaponGlobals.weaponSlot.primary); } public void playerDead(){ pController.enabled = false; GetComponent<CharacterController>().enabled=false; shooterController.enabled=false; ikControl.enabled = false; //aimControl.enabled = false; anim.enabled = false; } void Update() { if (Input.GetKeyDown(KeyCode.I)) { if (isLocalPlayer) { interfaz.playerInfoText = playerNetID +" - "+ shooterController.primaryWeapon.GetComponent<arma>().armaNetID; interfaz.instance.updatePlayerInfo(); } CmdMessageLog(playerNetID + "- prymary: " + shooterController.primaryWeapon.GetComponent<arma>().armaNetID); } } [Command] public void CmdMessageLog(string s) { Debug.Log(s); } }y el escript donde se equipan las armas es el siguiente donde los parametros de primaryWeapon, secundaryWeapon y activeWeapon se quedan en null (solo el los jugadores que ya existian antes de entrar a la partida) using UnityEngine; using System.Collections; using UnityEngine.Networking; public class ShooterController : NetworkBehaviour { public GameObject bullet; public Transform target; public float smoothRotPlayer = 5f; public LayerMask aimMask; public Transform pointing; // apuntador public Transform pointingPivot; //eje o anclaje del apuntador/pointing (Shoulder/hombro) public Animator pointingAnimator; public GameObject primaryWeapon; public GameObject secundaryWeapon; public Transform primarySlot; public Transform secundarySlot; public weaponGlobals.weaponSlot currentSlot; public GameObject activeWeapon; public Transform leftHand; public Transform rightHand; [HideInInspector] public GameObject closerItem; public cameraViewMove playerCamera; public Animator playerAnimator { get { return GetComponent<Animator>(); } } arma miArma; Quaternion rotacion;//apuntar a target Quaternion desvio;// Quaternion rotPlayer; public bool useDinamicIk; float ikValue = 1f;//valor dinamico para el ik CharacterController charControl; public bool startReady = false; public bool startClientReady = false; // Use this for initialization public override void OnStartClient() { playerCamera = GameObject.FindWithTag("PlayerCam").GetComponent<cameraViewMove>(); //pooling PoolManager.instance.createPool(bullet, 10); //set charControl = GetComponent<CharacterController>(); pointingAnimator = pointing.gameObject.GetComponent<Animator>(); target = GameObject.FindGameObjectWithTag("LookPos").GetComponent<Transform>();// look pos mismo de las ik Debug.Log("ShooterController - starter"); startClientReady = true; } /* public override void OnStartClient() { Debug.Log("ShooterController - starter client"); } //*/ // Update is called once per frame [ClientCallback] void Update () { //Debug.Log(rotacion.eulerAngles); Debug.DrawRay(pointing.position, pointing.forward * 10, Color.cyan); Debug.DrawRay(pointing.position, (target.position - pointing.position).normalized, Color.blue); if (!isLocalPlayer) return; if (miArma = activeWeapon.GetComponent<arma>()){ interfaz.balasText = miArma.currentAmmo + " / " + miArma.ammo; } TakeCloserItemEvent(); equipPrimaryEvent(); equipSecundaryEvent(); isAimingEvent(); aimingEvent(); isShootingEvent(); isReloadEvent(); useIkEvent(); } #region events public void TakeCloserItemEvent(){ if(closerItem){ Vector3 currentHeading = closerItem.transform.position - transform.position; float currentDistance = currentHeading.magnitude; if(currentDistance < 0.5f){ arma wp = closerItem.GetComponent<arma>(); interfaz.itemName = "[E] to use "+wp.nombre.ToString(); if(Input.GetKeyDown("e")){ if(wp.slotUsed == weaponGlobals.weaponSlot.primary){ primaryWeapon.GetComponent<arma>().isItem(); primaryWeapon.transform.parent = null; primaryWeapon = closerItem; }else{ secundaryWeapon.GetComponent<arma>().isItem(); secundaryWeapon.transform.parent = null; secundaryWeapon = closerItem; } //unEquip(); activeWeapon = closerItem; //equipActive(); closerItem = null; interfaz.itemName = ""; } }else{ interfaz.itemName = ""; } } } public void equipPrimaryEvent(){ if(Input.GetKeyDown("1")){ unEquip(); equip(weaponGlobals.weaponSlot.primary); CmdEquipOnNetwork(weaponGlobals.weaponSlot.primary); } } public void equipSecundaryEvent(){ if(Input.GetKeyDown("2")){ unEquip(); equip(weaponGlobals.weaponSlot.secundary); CmdEquipOnNetwork(weaponGlobals.weaponSlot.secundary); } } public void isAimingEvent(){ //direccion y ajusde de apuntado con movimiento suavisado if(Input.GetAxis("Fire2")>0.5f){ playerAnimator.SetBool("focus", true); //Cursor.lockState = CursorLockMode.Locked; }else{ playerAnimator.SetBool("focus", false); //Cursor.lockState = CursorLockMode.None; } } public void aimingEvent(){ pointing.rotation = Quaternion.Slerp(pointing.transform.rotation, rotacion, miArma.movement * Time.deltaTime); //pointing.transform.position = Vector3.Lerp(pointing.transform.position, pointingPivot.position, miArma.movement); pointing.position = pointingPivot.position; Camera.main.transform.localRotation = Quaternion.Lerp(Camera.main.transform.localRotation, Quaternion.Euler(0,0,0), miArma.movement *Time.deltaTime); // rotacion de arma y objeto al apuntar o en si isFps de cameraViewMove es true if((playerAnimator.GetBool("focus") || playerCamera.isFps) && !playerAnimator.GetBool("running")){ Debug.Log("is aiming"); Ray ray = new Ray(pointing.transform.position, target.position - pointing.transform.position); RaycastHit hit; if(Physics.Raycast(ray, out hit, 0.5f, aimMask)){ rotacion = transform.localRotation * Quaternion.Euler(45,-30,0); }else{ rotacion = Quaternion.LookRotation(target.position - pointing.transform.position); } Quaternion rot = Quaternion.LookRotation(target.position - pointing.transform.position); rotPlayer = Quaternion.Euler(0,rot.eulerAngles.y,0); transform.rotation = Quaternion.Slerp(transform.rotation, rotPlayer, smoothRotPlayer * Time.deltaTime); }else{ rotacion = transform.localRotation * Quaternion.Euler(45,-45,0); } } public void isShootingEvent(){ if(miArma.fireType == weaponGlobals.fireType.full){ if(Input.GetButton("Fire1")){//boton de disparo es presionado shootingHip(); } }else{ if(Input.GetButtonDown("Fire1")){ shootingHip(); } } } public void isReloadEvent(){ if(Input.GetButtonDown("Reload")){ miArma.reload(); } if(Input.GetKeyDown(KeyCode.F)){ miArma.ammo = miArma.maxAmmo; } } public void useIkEvent(){ //usar iks cuando apunta if(playerAnimator.GetBool("focus")){ //* ikValue += 3f * Time.deltaTime; if(ikValue>1f){ ikValue = 1f; } //*/ }else if(!playerAnimator.GetBool("focus")){ //* ikValue -= 2f * Time.deltaTime; if(ikValue < 0f){ ikValue = 0f; }//*/ } if(useDinamicIk){ GetComponent<ikController>().ikWeight = ikValue; } } #endregion #region equip public void equip(weaponGlobals.weaponSlot WeaponSlot){ currentSlot = WeaponSlot; switch (currentSlot) { case weaponGlobals.weaponSlot.primary: activeWeapon = primaryWeapon; break; case weaponGlobals.weaponSlot.secundary: activeWeapon = secundaryWeapon; break; } miArma = activeWeapon.GetComponent<arma>(); activeWeapon.transform.parent = rightHand;//emparentamos a la mano miArma.equip();//equipamos arma (ajustamos posicion y rotacion) => !!importante despues de emparentar con mano pointingAnimator.SetInteger("weaponIndex", miArma.animIndex); pointing.transform.localRotation = Quaternion.Euler(90,0,0); playerCamera.aimZoomPos = miArma.aimZoomPos; //Debug.Log("weaponManager - active Weapon equipado"); } public void unEquip(){ primaryWeapon.transform.parent = primarySlot; primaryWeapon.transform.localPosition = Vector3.zero; primaryWeapon.transform.localRotation = Quaternion.Euler(Vector3.zero); secundaryWeapon.transform.parent = secundarySlot; secundaryWeapon.transform.localPosition = Vector3.zero; secundaryWeapon.transform.localRotation = Quaternion.Euler(Vector3.zero); primaryWeapon.GetComponent<arma>().isNotItem(); secundaryWeapon.GetComponent<arma>().isNotItem(); } [Command] public void CmdEquipOnNetwork(weaponGlobals.weaponSlot weaponSlot) { RpcEquipOnAllClients(weaponSlot); } [ClientRpc] public void RpcEquipOnAllClients(weaponGlobals.weaponSlot weaponSlot) { //in localPlayer is already equiped. Not need equip again if (!isLocalPlayer) { unEquip(); equip(weaponSlot); } } #endregion #region shooting public void shootingHip(){ if(shoot()){// el arma disparo? float vHip = Random.Range(0f,miArma.angleHip); float hHip = Random.Range(-miArma.angleHip, miArma.angleHip); float bhip = Random.Range(miArma.backHip/2, miArma.backHip); desvio = Quaternion.Euler(pointing.transform.eulerAngles + new Vector3(-vHip/2, hHip/2, 0)); pointing.transform.rotation = desvio; pointing.transform.position += pointing.transform.forward * -bhip; Camera.main.transform.Rotate(-vHip*miArma.camaraHip, hHip*miArma.camaraHip, 0); } } private bool shoot(){ if(miArma.tiempo <= Time.time && miArma.currentAmmo>0){ //RaycastHit hit; float randomAngle1 = Random.Range(-miArma.desvioBala/2, miArma.desvioBala/2); //rotate x angle float randomAngle2 = Random.Range(0 , 360); //rotate z angele //Ray ray = new Ray(miarma.barrel.position, miarma.barrel.eulerAngles + new Vector3(random1, 0, random2)); // if (Physics.Raycast(ray , out hit, 100f, mascara)){ // Quaternion angulo = Quaternion.FromToRotation(Vector3.zero, hit.normal); // GameObject go = Instantiate(miarma.impact, hit.point, angulo) as GameObject; // Destroy(go, 1f); // // } GameObject particle = Instantiate(miArma.particulaShot, miArma.barrel.position, miArma.barrel.rotation) as GameObject; Destroy(particle, 1); GameObject poolBullet = PoolManager.instance.reuseObject(bullet, miArma.barrel.position, miArma.barrel.rotation); poolBullet.GetComponent<bala>().setHitCallback(playerHitCallback); poolBullet.GetComponent<bala>().damage = miArma.bulletDamage; poolBullet.transform.Rotate(0,0,randomAngle2);//first rotate z angle to change the up douwn perspective poolBullet.transform.Rotate(randomAngle1,0,0);//alter x angle to view more up down to itself perspective poolBullet.GetComponent<Rigidbody>().velocity = poolBullet.transform.forward*miArma.bulletVelocity; //CmdShoot(miarma.barrel.position, miarma.barrel.eulerAngles, miarma.desvioBala, miarma.bulletVelocity, miarma.bulletDamage); miArma.sonido.PlayOneShot(miArma.shotSound); //if(anim){ // anim.SetTrigger("shoot"); //} miArma.tiempo = Time.time + miArma.fireRate; miArma.currentAmmo --; interfaz.balasText = miArma.currentAmmo + " / " + miArma.ammo; //instanciar cartuchos de balas disparadas switch(miArma.fireType){ case weaponGlobals.fireType.bolt: //generer casquillo despues del bolt break; case weaponGlobals.fireType.pump_action: //generar casquillo despues del pump break; case weaponGlobals.fireType.revolver: //generar casquillos cuando regarga break; default: miArma.genCas(); break; } return true; }else{ return false; } } void playerHitCallback(GameObject target, float damage, bool isHeadshot){ CmdMakeDamage(this.gameObject, target, damage, isHeadshot); } [Command] private void CmdMakeDamage(GameObject player, GameObject target, float damage, bool isHeadshot){ target.GetComponent<vitality>().CmdDamageIt(player, damage, isHeadshot); } #endregion } alguna idea o hay alguna función que se ejecute en los jugadores que ya estaban conectados?.
  22. Buscando info sobre c# me he encontrado con esta web, es un rápido tutorial de c# que toca desde variables hasta polimorfismos, con ejemplos y de manera muy simple, me parece bueno para los que quieren empezar a programar o los que vinimos de otro lenguaje. https://pccito.ugr.es/csharp/
  23. Buen día a todos. Necesito ayuda para resolver el siguiente problema: tengo en escena un GameObject vacio que funciona como contenedor de un script que adjunto aqui y que debe disparar un aidio determinado cuando he hace clik en un boton inserto en un canvas. El problema es que los audios aparentemente no se disparan o no se escucha nada. Consideraciones a tener en cuenta: 1) En el entorno del proyecto: 1.1) hay un canvas que tiene un InputField y un boton. El boton a su vez contiene a un Gameobject vacio que denomino "disparar". Disparar contiene el script adjunto. El Button (script) [ en el inspector], en su On Click tiene asociado el script "CantarAria.cs" y la funcion DispararAudio. el "disparar" contiene el mismo script, el array de Audioclip tiene 4 lementos y en cada uno hay un archivo de audio, disparar tiene 4 Audio Source y en cada uno de ellos esta el archivo de audio correpondiente y normalizados sus volumenes al maximo, obviemnte los nombres de los archivos de audio coinciden ya que los mismos son asignados en el inspector. No se reporta ningun error y la variable "cont" se incrementa correctamente al apretar el boton, en el metodo DispararAudio. Que me falta, que me estoy olvidadno u omitiendo o por q los audios no se disparan?? using UnityEngine; using System.Collections; using UnityEngine.UI; public class CantarAria : MonoBehaviour { public AudioClip []aria; AudioSource audio; public int cont = 0; // Use this for initialization void Start () { audio = GetComponent(); aria = new AudioClip[4]; } /* void OnClik() { print ("on clik "); DispararAudio (); cont++; } */ // Update is called once per frame public void DispararAudio() { print ("cont = " + cont); if (cont < 4) { audio.clip = aria [cont]; audio.PlayOneShot (aria [cont]); cont ++; } } }CantarAria.cs
  24. Hola todos, soy nuevo en el foro pero hace tiempo lo visito y me a servido mucho. llendo al grano actualmente estoy haciendo un juego de tipo connect 4 o 4 in a row; tengo hecho el script y ya logre que cuando haya 4 esferas de un mismo color en fila o columna me de un mensaje de ganador pero no tengo la mas minima idea de como lograr que chequee o verifique si hay 4 en diagonal hacia arriba/abajo de un ganador tambien, alguien me podria ayudar/explicar un poco, les agradeceria mucho. me siento algo frustrado xD dejo el codigo completo aqui: using UnityEngine; using System.Collections; public class Grid2D : MonoBehaviour { public int width; public int height; public GameObject puzzlePiece; private GameObject[,] grid; public int cont; public int cont2; public int cont3; public int cont4; public int cont5; public int cont6; public int cont7; Color col = Color.white; void Start () { grid = new GameObject[width =10, height=10]; for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { GameObject go = GameObject.Instantiate (puzzlePiece) as GameObject; Vector3 position = new Vector3(x, y, 0); go.transform.position = position; grid [x, y] = go; } } } void Update () { Vector3 mPosition = Camera.main.ScreenToWorldPoint (Input.mousePosition); UpdatePickedPiece(mPosition); } void UpdatePickedPiece(Vector3 position) { int x = (int)(position.x + 0.5f); int y = (int)(position.y + 0.5f); if (x >= 0 && y >= 0 && x < width && y < height) { GameObject go = grid [x, y]; if (Input.GetMouseButtonDown (0)) { if (go.GetComponent<Renderer>().material.color == col) { cont++; if (cont % 2 == 0) { go.GetComponent<Renderer> ().material.SetColor ("_Color", Color.red); filas (x,y,Color.red); columnas (x,y,Color.red); } else { go.GetComponent<Renderer> ().material.SetColor ("_Color", Color.black); filas2 (x,y,Color.black); columnas2 (x,y,Color.black); } } else { cont--; } } } } void filas(int x, int y, Color col) { for(int _x = 0; _x < width; _x++) { if(grid[_x,y].GetComponent<Renderer>().material.color == col) { cont3++; if(cont3 == 5) { print("gano rojo"); } } else { cont3 = 1; } } } void filas2(int x, int y, Color col) { for(int _x = 0; _x < width; _x++) { if(grid[_x,y].GetComponent<Renderer>().material.color == col) { cont4++; if(cont4 == 5) { print("gano negro"); } } else { cont4 = 1; } } } void columnas(int x, int y, Color col) { for(int _y = 0; _y < height; _y++) { if(grid[x,_y].GetComponent<Renderer>().material.color == col) { cont5++; if(cont5 == 5) { print("gano rojo"); } } else { cont5 = 1; } } } void columnas2(int x, int y, Color col) { for(int _y = 0; _y < height; _y++) { if(grid[x,_y].GetComponent<Renderer>().material.color == col) { cont6++; if(cont6 == 5) { print("gano negro"); } } else { cont6 = 1; } } } }
UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...