void DoHook() { anim.SetTrigger("hook"); state = E_HeroHookState.Hooking; Ray ray = Camera.main.ScreenPointToRay(screenCenterPoint); Vector3 hookDestPos = ray.origin + ray.direction * maxShotLength; hookDestPos = ShotCtrl.GetFirstHitAsMapOrEnemy(this, ray, maxShotLength).point; hookOriginPos.transform.LookAt(hookDestPos); photonView.RPC("ActivateHook", RpcTarget.All, hookOriginPos.transform.rotation); }
private void OnTriggerEnter(Collider other) { if (!attachingHero.photonView.IsMine) { return; } if (!( (other.gameObject.layer == Constants.mapLayerMask && !other.gameObject.CompareTag(LayerMask.LayerToName(attachingHero.gameObject.layer))) || TeamInfo.GetInstance().IsThisLayerEnemy(other.gameObject.layer))) { return; } Vector3 collCenter = coll.bounds.center; //콜라이더의 센터를 폭발 지점으로. attachingHero.photonView.RPC("BoomUltMissile", Photon.Pun.RpcTarget.All, attachedNumber, transform.position); //효과만. List <Hero> enemyHeroes = TeamInfo.GetInstance().EnemyHeroes; for (int i = 0; i < enemyHeroes.Count; i++) { Vector3 enemyPosition = enemyHeroes[i].CenterPos - collCenter; if (enemyPosition.sqrMagnitude < explosionRangeSqr) { float dis = enemyPosition.magnitude; if (ShotCtrl.MapIntersectedCheck(attachingHero, collCenter, enemyHeroes[i].CenterPos)) { MyDebug.Log("HSUltMissile::OnTriggerEnter- " + enemyHeroes[i].photonView.ViewID + "는 솔져 미사일 폭발 속에서, 중간에 벽이 있어서 피해를 받지 않음"); continue; } Vector3 dir = enemyPosition.normalized; dir *= ((explosionRange - dis) * knockBackPowerInterValue); //폭발 지점과 거리 계산해서 알맞게 넉백 파워를 조절해줌. MyDebug.Log("HSUltMissile::OnTriggerEnter- " + enemyHeroes[i].photonView.ViewID + "솔져 미사일 피격. 넉백 = " + dir + "피해량=" + amount * (explosionRange - dis) * explosionRangeDiv); enemyHeroes[i].photonView.RPC("Knock", Photon.Pun.RpcTarget.All, dir); enemyHeroes[i].photonView.RPC("GetDamaged", Photon.Pun.RpcTarget.All, amount * (explosionRange - dis) * explosionRangeDiv, attachingHero.photonView.ViewID); } } }