Jump to content
UnitySpain

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

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

Blogs

  • byGui

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 52 results

  1. ¡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
  2. 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.
  3. 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
  4. 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
  5. 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.
  6. 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
  7. 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
  8. 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
  9. ¡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!
  10. 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?
  11. 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
  12. 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
  13. 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?.
  14. 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/
  15. 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
  16. 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; } } } }
  17. Buenas a todos tengo una duda como ago para saltar bajo un collider y subir pero al momento de pisarlo que no caiga, quiero hacer plataformas para que el personaje pueda subir..
  18. Tengo una duda con los colliders, tengo enemigos con colliders en un terreno 2d con colliders, los enemigos tienen puesto colliders pequenos muy delgados para que no se caigan por el terreno pero son delgados para que los enemigos puedan transpasarse pero lo que pasa esque son tan pequenos que cuando me persiguen y se encuentran con una pared transpasan la pared y toca hacer mas grande el collider pero ahi pasa que ya los enemigos no se transpasan, y tenia la duda de... No hay alguna forma para que el collider no solo sea trigger para los enemigos y para el suelo no...??? No se si me di a entender quisiera saber si hay alguna forma para que el collider solo funcione para el suelo???
  19. Buenas tardes. Estoy haciendo un proyecto universitario, en el cual necesito hacer un editor de niveles. Necesito que al pulsar con el ratón en un lugar del terreno visto desde arriba, me salga un pequeño menú (GuiText o GuiButton por ejemplo) donde pueda elegir si colocar en ese lugar uno u otro objeto (cubo o esfera, por ejemplo), y que aparezca dicho objeto en el lugar (como prefabs). Por dónde podría empezar? Toda ayuda es bienvenida. Gracias y saludos.
  20. Ayuda tengo estos dos codigos uno es el AI de un enemigo y el otro es el codigo de la bala de mi jugador no se que pasa que cuando la bala entra en el collider del enemigo no le baja vida me podrian ver que pasa.... Este es el de la bala public bool right; public bool prueba = false; public float velocidad = 10; public float TimeDestroy = 10; public int dmg = 25; private FirePlantAI fire; void Start() { fire = GameObject.FindGameObjectWithTag("Enemy").GetComponent<FirePlantAI>(); } void Update() { Destroy(gameObject, TimeDestroy); if (prueba) { fire.prueba = true; } if (right) { transform.Translate(Vector3.right * Time.deltaTime * velocidad, Camera.main.transform); } else { transform.Translate(Vector3.left * Time.deltaTime * velocidad, Camera.main.transform); } } void OnTriggerEnter2D(Collider2D col) { if (col.isTrigger != true && col.CompareTag("Enemy")) { col.SendMessageUpwards("Damage", dmg); // Destroy(gameObject); } } } y este el del AI public int curHealth; public int maxHealth = 100; public float distance; public float wakeRange; public float shootInterval; public float bullerSpeed = 100; public float bulletTimer; public bool Rise = false; public bool Right = true; public bool prueba = false; public GameObject bullet; public Transform target; public Animator anim; public Transform shootPointLeft; public Transform shootPointRight; void Awake() { anim = gameObject.GetComponent<Animator>(); } void Start() { curHealth = maxHealth; } void Update() { if (curHealth <= 0) { Die(); } if (curHealth > maxHealth) { curHealth = maxHealth; } anim.SetBool("Rise", Rise); anim.SetBool("Right", Right); RangeCheck(); if (target.transform.position.x > transform.position.x) { Right = true; } if (target.transform.position.x < transform.position.x) { Right = false; } } void RangeCheck() { distance = Vector3.Distance(transform.position, target.transform.position); if (distance < wakeRange) { Rise = true; } if(distance > wakeRange) { Rise = false; } } public void Attack(bool attackingRight) { bulletTimer += Time.deltaTime; if (bulletTimer >= shootInterval) { Vector2 direction = target.transform.position - transform.position; direction.Normalize(); if (!attackingRight) { GameObject bulletClone; bulletClone = Instantiate(bullet, shootPointLeft.transform.position, shootPointLeft.transform.rotation) as GameObject; bulletClone.GetComponent<Rigidbody2D>().velocity = direction * bullerSpeed; bulletTimer = 0; } if (attackingRight) { GameObject bulletClone; bulletClone = Instantiate(bullet, shootPointRight.transform.position, shootPointRight.transform.rotation) as GameObject; bulletClone.GetComponent<Rigidbody2D>().velocity = direction * bullerSpeed; bulletTimer = 0; } } } public void Damage(int damage) { curHealth -= damage; gameObject.GetComponent<Animation>().Play("Player_Damage"); } void Die() { Destroy(gameObject); } Grasias por su atencion..
  21. Buenas, el caso es que quiero conseguir que el enemigo, en vez de perseguirme huya de mi. Estoy usando un navmeshagent, y ya tengo la distancia para conmigo, consigo que me siga, pero no que huya y no encuentro nada por google :/
  22. Hola comunidad! Soy nuevo aquí tengo una interrogante acerca de como comunicar una app desarrollada en Unity3D con una app en Android.Por ejemplo en el pantallazo que adjunto, muevo el cubo sobre uno de sus ejes (usando un evento touch), el valor de la rotacion se muestra arriba (angulo = 33) ... Lo que he logrado hacer es embeber esa app hecha en Unity dentro de una app Android, pero lo que necesito ahora es poder usar ese valor 33 en Android (Algo como pasar datos desde Unity a Android).Espero alguien pueda ayudarme.  Gracias!
  23. Losiento por repetir post esque mi computadora no me deja postear en la pagina y no se porque pasa eso y el otro post ya se fue mu abajo.... Al tema quiero hacer 2 cosas. 1. Cuando pase el puntero del mouse por encima del boton sin hacer click aparesca o un texto o una imagen, cualquiera de las dos me sirve. 2. Cuando escriba en el input el texto que escriba salga en un objeto text UI. Si alguien me puede ayudar con esas cosas me ayudarian muchisimo...!!! Grasias por su atencion..
  24. Hola amigos Bueno, tengo un problema que no se me ocurre nada, como que estoy en blanco quizas sea comprobar con tags o no se como bueno.. El tema es que cuando fundation que tengo con el raycast cuando no toque nada por ejemplo un palo o otro fundation, que si se pueda, y tambien que este tocando el terreno, que si se pueda construir, pero claro si toca o colisiona con algo de eso que no toque. pensaba añadir algo que compruebe pero no se me ocurre nada porque el raycast no funcionaria porque si por ejemplo el borde solo este colisionando el rayo no lo detectaria. seria añadiendole un colision al fundation y que detecte si toca algun gameobject?...Fotos... Bueno las fotos quedaron ahi... La primera es cuando si puedo, la segunda es cuando no puedo, y lo mismo con la tercera quiero que no se pueda... Creo que me entendieron. Pido porfavor que el script sea c# porque se me va a mezclar todo. aca el script con el que hago esto asi de paso ayudo a alguien y me lo modifican a ver que lineas le tengo que añadir para que esto compruebe DESDE YA GRACIAS... using UnityEngine; using System.Collections; public class Construir : MonoBehaviour { RaycastHit hit; public Transform Prefab; public Transform Piso; // Use this for initialization void Start () { } // Update is called once per frame void Update () { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //Vector3 fwd = transform.TransformDirection (Vector3.forward); if(Physics.Raycast(ray,out hit, 10)){ Prefab.position = hit.point; if(Input.GetButtonDown("Fire1")){ if(){ /*aca pensaba añadir algo que compruebe pero no se me ocurre nada porque el raycast no funcionaria porque si por ejemplo el borde solo este colisionando el rayo no lo detectaria.*/ } Instantiate (Piso, Prefab.position, Prefab.rotation); } //Instantiate (clon, objeto, Quaternion.identity); print (hit.point); } } }
×
×
  • Create New...