public void DirectAttack() { if (m_MyBox.tag == "PlayerU" && Input.GetMouseButtonDown(1)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitinfo; if (Physics.Raycast(ray, out hitinfo, 100.0f, 1 << LayerMask.NameToLayer("enemyunit")))//타겟 선택 공격 { m_enemy = hitinfo.collider.gameObject.GetComponent <UnitBox>(); m_fDists = Vector3.Distance(m_MyBox.transform.position, m_enemy.transform.position); if (m_fDists <= m_MyBox.m_sUnit.Range) { m_MyBox.TargetPosition = m_MyBox.transform.position; if (m_enemy != null) { m_enemy.m_sUnit.Hp = m_enemy.m_sUnit.Hp - m_sUnit.Damage; m_enemy.ChangeHp(m_enemy.m_sUnit.Hp, m_enemy.m_sUnit.MaxHp); //counttest++; if (m_enemy.m_sUnit.Hp <= 0) { Destroy(m_enemy.gameObject); m_enemy = null; } } } if (m_fDists > m_MyBox.m_sUnit.Range) { m_MyBox.TargetPosition = m_enemy.transform.position; } } } }
//어택땅 키와 그냥 이동만 하는 키를 따로 만들어야한다. public void Attack()//유닛을 한번때리고 함수가 종료되는것이 아닌 죽일때까지 반복되는듯함 { if (m_enemy != null) { if (m_UnitCommend == 1 && DetectCheck == 1) { m_enemy.m_sUnit.Hp = m_enemy.m_sUnit.Hp - m_sUnit.Damage; this.transform.LookAt(m_enemy.transform); if (this.CompareTag("PlayerU")) { Instantiate(HitEffect, HitEffectpoint.transform.position, Quaternion.identity); SoundManager.instance.PlaySound(); } if (this.CompareTag("EnemyU")) { animator.SetBool("Attacking", true); } Instantiate(ShootEffect, m_enemy.ShootEffectpoint.transform.position, Quaternion.identity); m_enemy.ChangeHp(m_enemy.m_sUnit.Hp, m_enemy.m_sUnit.MaxHp); if (m_enemy.m_sUnit.Hp <= 0) { //Destroy(m_enemy.gameObject); if (this.CompareTag("EnemyU")) { animator.SetBool("Attacking", false); } m_enemy = null; } } } }
public void Detect(/*UnitBox uBox*//*, UnitBox euBox*/)//유닛 탐지 { //m_fDists = Vector3.Distance(uBox.transform.position, euBox.transform.position); if (m_MyBox != null) { Collider[] hitCollider = Physics.OverlapSphere(m_MyBox.transform.position, 6.0f /*, 1 << LayerMask.NameToLayer("enemyunit")*/); //탐지 if (m_MyBox.tag == "PlayerU" && m_UnitCommend != 0) { foreach (Collider hit in hitCollider) { if (hit.tag == "EnemyU") { //Debug.Log("탐지"); m_enemy = hit.gameObject.GetComponent <UnitBox>(); //탐지 한 적개체를 타겟으로 지정 m_fDists = Vector3.Distance(m_MyBox.transform.position, m_enemy.transform.position); if (m_fDists > m_MyBox.m_sUnit.Range) { m_MyBox.TargetPosition = m_enemy.transform.position; //적유닛의 위치로이동 //Debug.Log("too far"); DetectCheck = 0; } if (m_fDists <= m_MyBox.m_sUnit.Range) //사거리 안으로 이동시 { m_MyBox.TargetPosition = m_MyBox.transform.position; //현재위치에 멈춤 //Attack(); //StartCoroutine("Attack"); DetectCheck = 1; } } } } //if (m_MyBox.tag == "EnemyU") //{ // foreach (Collider hit in hitCollider) // { // if (hit.tag == "PlayerU") // { // //Debug.Log("탐지"); // m_enemy = hit.gameObject.GetComponent<UnitBox>(); //탐지 한 적개체를 타겟으로 지정 // m_fDists = Vector3.Distance(m_MyBox.transform.position, m_enemy.transform.position); // if (m_fDists > m_MyBox.m_sUnit.Range) // { // m_MyBox.TargetPosition = m_enemy.transform.position;//적유닛의 위치로이동 // //Debug.Log("too far"); // DetectCheck = 0; // } // if (m_fDists <= m_MyBox.m_sUnit.Range)//사거리 안으로 이동시 // { // m_MyBox.TargetPosition = m_MyBox.transform.position;//현재위치에 멈춤 // //Attack(); // //StartCoroutine("Attack"); // DetectCheck = 1; // } // } // } //} } }
private void button2_Click_1(object sender, EventArgs e) { BarcodeBox.Clear(); ItemDescriptionBox.Clear(); UnitBox.Clear(); QuantityBox.Clear(); UnitPriceBox.Clear(); RetailPriceBox.Clear(); }
public void MultiUnitaction() { if (Input.GetMouseButtonDown(0) /*&&Input.GetKey(KeyCode.LeftShift)*/) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitinfo; if (Physics.Raycast(ray, out hitinfo, 100.0f, 1 << LayerMask.NameToLayer("playerunit"))) { Target = hitinfo.collider.gameObject.GetComponent <UnitBox>(); m_cTargetlist.Add(Target); //Targetcmd = hitinfo.collider.gameObject.GetComponent<UnitBox>(); //m_cTargetcmdlist.Add(Targetcmd); } else { m_cTargetlist.Clear(); //Target = null; //m_cTargetcmdlist.Clear(); } } if (Target != null) { if (Input.GetMouseButtonDown(1)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitinfo; if (Physics.Raycast(ray, out hitinfo, 100.0f, 1 << LayerMask.NameToLayer("enemyunit"))) { Targetenemy = hitinfo.collider.gameObject.GetComponent <UnitBox>(); m_fDist = Vector3.Distance(Target.TargetPosition, Targetenemy.TargetPosition); if (m_fDist < Target.m_sUnit.Range) { Debug.Log("Detect Enemy"); //Target.m_sUnit.Attack(Targetenemy.m_sUnit); Targetenemy.m_sUnit.Hp = Targetenemy.m_sUnit.Hp - Target.m_sUnit.Damage;//임시 공격 Debug.Log(Targetenemy.m_sUnit.Hp); } }//문제점1 적을 찍어도 적 밑의 지형도 같이 찍히면서 타켓의 포지션이 적의 포지션 근처로 //바뀌면서 적과의 거리가 무조건 지근거리로 나오게된다. //이것을 이너미유닛과 디폴트의 위치를 바꿔주는것만으로도 해결 if (Physics.Raycast(ray, out hitinfo, 100.0f, 1 << LayerMask.NameToLayer("Default"))) { Positon = hitinfo.point; } for (int i = 0; i < m_cTargetlist.Count; i++) { m_cTargetlist[i].TargetPosition = Positon; } //Target.TargetPosition = Positon; } } }
public void Create() { gameObject.SetActive(true); List <Unit> army = GameData.instance.data.army; unitBoxes = new List <UnitBox>(); for (int i = 0; i < army.Count; i++) { UnitBox box = Instantiate(unitBoxPrefab, unitContainer.transform); box.SetUnit(army[i], i, !unitManager.fallenUnits.Contains(i)); box.graveyard = this; unitBoxes.Add(box); } Undo(); }
//어택땅 키와 그냥 이동만 하는 키를 따로 만들어야한다. public void Attack()//유닛을 한번때리고 함수가 종료되는것이 아닌 죽일때까지 반복되는듯함 { if (m_enemy != null) { if (m_UnitCommend == 1 && DetectCheck == 1) { m_enemy.m_sUnit.Hp = m_enemy.m_sUnit.Hp - m_sUnit.Damage; m_enemy.ChangeHp(m_enemy.m_sUnit.Hp, m_enemy.m_sUnit.MaxHp); if (m_enemy.m_sUnit.Hp <= 0) { //Destroy(m_enemy.gameObject); m_enemy = null; } } } }
public void UnitSelect() { if (m_MyBox.tag == "PlayerU" && Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitinfo; if (Physics.Raycast(ray, out hitinfo, 100.0f, 1 << LayerMask.NameToLayer("playerunit"))) { m_MyBox = hitinfo.collider.gameObject.GetComponent <UnitBox>(); m_MyBox.SelectCheck = 1; Debug.Log(SelectCheck); } else if (Physics.Raycast(ray, out hitinfo, 100.0f, 1 << LayerMask.NameToLayer("Default"))) { SelectCheck = 0; Debug.Log(SelectCheck); } } }
public void DirectAttack() { if (this.tag == "PlayerU" && Input.GetMouseButtonDown(1)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitinfo; if (Physics.Raycast(ray, out hitinfo, 100.0f, 1 << LayerMask.NameToLayer("enemyunit")))//타겟 선택 공격 { m_enemy = hitinfo.collider.gameObject.GetComponent <UnitBox>(); m_fDists = Vector3.Distance(this.transform.position, m_enemy.transform.position); if (m_fDists <= this.m_sUnit.Range) { this.TargetPosition = this.transform.position; this.m_UnitCommend = 1; } if (m_fDists > this.m_sUnit.Range) { this.TargetPosition = m_enemy.transform.position; } } } }
public void Detect(/*UnitBox uBox*//*, UnitBox euBox*/)//유닛 탐지 { if (this != null) { Collider[] hitCollider = Physics.OverlapSphere(this.transform.position, 6.0f); //탐지 if (this.tag == "PlayerU" && m_UnitCommend != 0) { foreach (Collider hit in hitCollider) { if (hit.tag == "EnemyU") { if (hit.gameObject.GetComponent <UnitBox>().m_sUnit.Hp >= 0) { m_enemy = hit.gameObject.GetComponent <UnitBox>(); //탐지 한 적개체를 타겟으로 지정 m_fDists = Vector3.Distance(this.transform.position, m_enemy.transform.position); if (m_fDists > this.m_sUnit.Range) { this.TargetPosition = m_enemy.transform.position;//적유닛의 위치로이동 DetectCheck = 0; } if (m_fDists <= this.m_sUnit.Range + 0.2) //사거리 안으로 이동시 { this.TargetPosition = this.transform.position; //현재위치에 멈춤 DetectCheck = 1; } } } } } //Collider[] hitZombieCollider = Physics.OverlapSphere(this.transform.position, 100.0f); if (this.tag == "EnemyU") { foreach (Collider hit in hitCollider) { if (hit.tag == "PlayerU") { //Debug.Log("탐지"); m_enemy = hit.gameObject.GetComponent <UnitBox>(); //탐지 한 적개체를 타겟으로 지정 m_fDists = Vector3.Distance(this.transform.position, m_enemy.transform.position); if (m_fDists > this.m_sUnit.Range) { this.TargetPosition = m_enemy.transform.position; //적유닛의 위치로이동 //Debug.Log("too far"); animator.SetBool("walking", true); animator.SetBool("Attacking", false); DetectCheck = 0; } if (m_fDists <= this.m_sUnit.Range + 0.2) //사거리 안으로 이동시 { this.TargetPosition = this.transform.position; //현재위치에 멈춤 //Attack(); //StartCoroutine("Attack"); DetectCheck = 1; } } else if (hit.tag == "PlayerB") { m_TargetofZombie = hit.gameObject.GetComponent <BuildingBox>(); m_fDists = Vector3.Distance(this.transform.position, m_TargetofZombie.transform.position); if (m_fDists > this.m_sUnit.Range) { this.TargetPosition = m_TargetofZombie.transform.position; animator.SetBool("walking", true); animator.SetBool("Attacking", false); } if (m_fDists <= this.m_sUnit.Range + 1) { this.TargetPosition = this.transform.position; DetectCheck = 2; } } if (hit.tag == "Center") { m_enemys_target = hit.gameObject.GetComponent <Center>(); m_fDists = Vector3.Distance(this.transform.position, m_enemys_target.transform.position); if (m_fDists > this.m_sUnit.Range) { this.TargetPosition = m_enemys_target.transform.position; animator.SetBool("walking", true); animator.SetBool("Attacking", false); //ZombieDeCheck = 0; } if (m_fDists <= this.m_sUnit.Range + 2) { this.TargetPosition = this.transform.position; //ZombieDeCheck = 1; DetectCheck = 3; } } } } } }