void Fire() //atirar { //Dispersao da bala (definir) Quaternion dispersao = DefineSpread(); audioSource.PlayOneShot(shootSound); //tocar som de atirar //criar bullet GameObject bullet = Instantiate(bulletPrefab, bulletSpawn.position, bulletSpawn.rotation * dispersao); bullet.layer = LayerMask.NameToLayer("PlayerBullet"); //informar layer da bala BulletHealth bulletH = bullet.GetComponent <BulletHealth>(); //pegar script de vida da bala if (bulletH != null) //se conseguiu { bulletH.source = "Character"; //informar fonte da bala bulletH.bulletDamage = bulletDamage; //informar dano da bala } //velocidade da bala (enviar funcao) bullet.gameObject.SendMessageUpwards("SetVelocity", bulletSpeed, SendMessageOptions.DontRequireReceiver); //enviar velocidade, nao requisitar erro caso nao encontre //destruir bullet apos x segundos Destroy(bullet, bulletLifeTime); //tempo de vida da bullet }
void Fire() //atirar { if (bulletX) //mudar tipo de bala: raio//bala (para teste) { //criar bullet GameObject bullet = Instantiate(laserPrefab, bulletSpawn.position, bulletSpawn.rotation); bullet.layer = LayerMask.NameToLayer("PlayerBullet"); //informar layer da bala BulletHealth bulletH = bullet.GetComponent <BulletHealth>(); //pegar script de vida da bala if (bulletH != null) //se conseguiu { bulletH.source = "Character"; //informar fonte da bala bulletH.bulletDamage = bulletDamage; //informar dano da bala } //bullet.GetComponent<LaserController2>().bulletSpawnTransform = gameObject.transform.GetChild(0); //pega o transform do primeiro filho (bullet spawn) bullet.gameObject.SendMessageUpwards("SetBulletSpawnTransform", gameObject.transform.GetChild(0), SendMessageOptions.DontRequireReceiver); //enviar transform, nao requisitar erro caso nao encontre //destruir bullet apos x segundos Destroy(bullet, bulletLifeTime); //tempo de vida da bullet } else { //criar bullet GameObject bullet = Instantiate(bulletPrefab, bulletSpawn.position, bulletSpawn.rotation); bullet.layer = LayerMask.NameToLayer("PlayerBullet"); //informar layer da bala bullet.GetComponent <BulletHealth>().source = "Character"; //informar fonte da bala bullet.GetComponent <BulletHealth>().bulletDamage = bulletDamage; //informar dano da bala //velocidade da bala (enviar funcao) bullet.gameObject.SendMessageUpwards("SetVelocity", bulletSpeed, SendMessageOptions.DontRequireReceiver); //enviar velocidade, nao requisitar erro caso nao encontre //destruir bullet apos x segundos Destroy(bullet, bulletLifeTime); //tempo de vida da bullet } }
public Vector3 DoLaser() { BulletHealth bulletH = gameObject.GetComponent <BulletHealth>(); if (bulletH != null && bulletH.GetCollisionMask() != 0) //verificar se ja existe, e se nao eh nulo { collisionMask = bulletH.GetCollisionMask(); //setar mascara de colisao (pra dependendo de quem segura a arma, etc) } Vector3 pontoFinalLaser = bulletSpawnTransform.position + bulletSpawnTransform.right * maxDistLaser; //pra frente vermelho ate distancia maxima RaycastHit2D pontoColisao; //ponto de colisao do laser antes da distancia maxima Ray2D ray = new Ray2D(bulletSpawnTransform.position, bulletSpawnTransform.right); //criar raio da posicao na direcao da seta vermelha (do mundo) //Physics2D.queriesStartInColliders = false; //int collisionMask = 1 << LayerMask.NameToLayer("PlayerBullet") | 1 << LayerMask.NameToLayer("Character"); //pegar layer corrente (bit shift + bit or) //collisionMask = ~collisionMask; //todas menos as selecionadas (inverter) pontoColisao = Physics2D.Raycast(ray.origin, bulletSpawnTransform.right, maxDistLaser, collisionMask);//, LayerMask.NameToLayer("PlayerBullet")); //com ponto de colisao e distancia e ignorar layer 9 do character //new ContactFilter2D(); Vector3 startPos = bulletSpawnTransform.position;// + bulletSpawnTransform.right; //Vector3 centerPos = new Vector3(startPos.x + pontoFinalLaser.x, startPos.y + pontoFinalLaser.y) / 2; float scaleX = Mathf.Abs(startPos.x - pontoFinalLaser.x); float scaleY = Mathf.Abs(startPos.y - pontoFinalLaser.y); Vector2 scale = new Vector2(scaleX, scaleY); //Debug.Log(pontoColisao.collider + " bla " + LayerMask.NameToLayer("PlayerBullet")); if (pontoColisao.collider) //verificar hit com algo { //lineRenderer.SetPosition(0, transform.position); //linha entre origem e request da colisao/ponto onde aconteceu a colisao //lineRenderer.SetPosition(1, pontoColisao.point); //ponto onde o raio colidiu lightCollider.transform.position = pontoColisao.point;// - (Vector2)posLuz; //alterar fim do laser //centerPos = new Vector3(startPos.x + pontoColisao.point.x, startPos.y + pontoColisao.point.y) / 2; scaleX = Mathf.Abs(startPos.x - pontoColisao.point.x); scaleY = Mathf.Abs(startPos.y - pontoColisao.point.y); scale = new Vector2(scaleX, scaleY); //scale = pontoColisao.point; //Debug.Log(pontoColisao.point); //Debug.Log(startPos + " " + scale.magnitude); //pra arrumar o "delay" de chegar o laser --> parar objeto momentaneamente if (pontoColisao.transform.gameObject.CompareTag("Enemy")) //torna meio impossivel um freeze laser (a nao ser que altere o stopTime) { pontoColisao.transform.gameObject.SendMessageUpwards("ChangeSpeedTemporarily", new float[] { stopTime, 0f }, SendMessageOptions.DontRequireReceiver); //enviar "freeze", nao requisitar erro caso nao encontre } //criar bala no ponto final do laser //GameObject bullet = Instantiate(bulletPrefab, pontoColisao.point, bulletSpawnTransform.rotation); //para teste //Debug.Log(bullet.transform.localPosition); //criar um "laserEnd" para arrumar a colisao final //Debug.Log("sizeBullet: " + bullet.gameObject.GetComponent<SpriteRenderer>().sprite.bounds.size.x); //para teste //Destroy(bullet, 4f); } else //se nao ocorreu colisao { //lineRenderer.SetPosition(0, transform.position); //linha entre origem e ponto final do laser //lineRenderer.SetPosition(1, pontoFinalLaser); lightCollider.transform.position = pontoFinalLaser; //alterar fim do laser } //centerPos.x -= 0.5f; //centerPos.y += 0.5f; //lightCollider.transform.position = pontoFinalLaser; //Strech(gameObject, transform.position, pontoFinalLaser, false); //gameObject.transform.position = centerPos; gameObject.transform.position = bulletSpawnTransform.position; //gameObject.transform.localScale = new Vector3(scaleX, scaleY, 1); //*2 Bounds b = gameObject.GetComponent <SpriteRenderer>().sprite.bounds; //isso deu trabalho pra encontrar '-'-' .-.-. float xSize = b.size.x; //Debug.Log(gameObject.GetComponent<SpriteRenderer>().sprite.bounds); gameObject.transform.rotation = Quaternion.Euler(new Vector3(0f, 0f, 90f)); //nao tao necessario agr, mas normaliza rotacao aumenta dps rotaciona //gameObject.transform.localScale = new Vector3(scale.magnitude / xSize, larguraFinal, 1); //*2 //encontrar proporcao certa '-' //gameObject.transform.localScale = Vector3.Lerp(transform.localScale, new Vector3(scale.magnitude / xSize, larguraFinal, 1), speedResize * Time.deltaTime); //*2 //encontrar proporcao certa '-' gameObject.transform.rotation = bulletSpawnTransform.rotation; return(new Vector3((scale.magnitude + differenceAdjust) / xSize, larguraFinal, 1)); //scale.magnitude = tamanho do desenho do traço do laser }