Publish:

νƒœκ·Έ: , ,

μΉ΄ν…Œκ³ λ¦¬:

πŸ“Œ KillLog

μ£½κ³  μ£½μ΄λŠ” κ²Œμž„μ„ ν•˜λ‹€λ³΄λ©΄ ν‚¬λ‘œκ·Έλ₯Ό μžμ—°μŠ€λŸ½κ²Œ μ ‘ν•˜κ²Œ λœλ‹€.

λ‚΄ ν™”λ©΄κ³Ό 적 화면에 μ–΄λ–»κ²Œ λ„μš°λŠ”κ°€λ₯Ό ν¬ν†€μ„œλ²„λ₯Ό 톡해 μ•Œμ•„λ³΄μž.

πŸ“ λ””μžμΈ

1

일반 ν‚¬λ‘œκ·Έμ™€ 같이 λ‹€μŒκ³Ό 같은 ν˜•νƒœλ‘œ λ§Œλ“€μ—ˆμœΌλ©°

2

κ³΅κ²©ν•œ μ‚¬λžŒμ˜ λ‹‰λ„€μž„κ³Ό κ³΅κ²©λ‹Ήν•œ μ‚¬λžŒμ˜ λ‹‰λ„€μž„μ„ ν‘œμ‹œν•΄μ€€λ‹€.

πŸ“ 원리

곡격을 ν•˜λ©΄ ν”Œλ ˆμ΄μ–΄μ˜ 무기 Collider κ°€ On 되며 Collider 에 닿인 ν”Œλ ˆμ΄μ–΄μ˜ TakeDamage λ©”μ†Œλ“œκ°€ ν˜ΈμΆœλœλ‹€.

이 λ•Œ κ³΅κ²©ν•œ μ‚¬λžŒμ˜ λ‹‰λ„€μž„λ„ ν•¨κ»˜ μ „λ‹¬ν•˜μ—¬ ν‚¬λ‘œκ·Έλ₯Ό λ„μš΄λ‹€.

ν‚¬λ‘œκ·ΈλŠ” λͺ¨λ“  ν”Œλ ˆμ΄μ–΄κ°€ 확인할 수 μžˆμ–΄μ•Ό ν•˜λ―€λ‘œ RPCλ₯Ό 톡해 μŠ€ν°ν•΄μ•Ό ν•˜λ©° ν‚¬λ‘œκ·Έ SetUp λ˜ν•œ RPC 둜 ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

πŸ“‹ Code

Player μ—κ²Œ λΆ™μ–΄μžˆλŠ” Knife

1
2
3
4
5
6
7
8
protected void OnTriggerEnter(Collider other)
{
  if(other.tag == "Player")
  {
    MyPlayer player = other.GetComponent<MyPlayer>();
    player.TakeDamage(GetComponentInParent<MyPlayer>()._NickName);
  }
}

곡격을 받은 Player

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// κ³΅κ²©ν•œ ν”Œλ ˆμ΄μ–΄μ˜ λ‹‰λ„€μž„μ„ λ°›μ•„μ˜΄
public void TakeDamage(string attacker)
{
  _pv.RPC("RPC_TakeDamage", RpcTarget.All);
  _pv.RPC("RPC_ShowKillLog", RpcTarget.All, attacker);
}
[PunRPC]
private void RPC_ShowKillLog(string attacker)
{
  if(_pv.IsMine)
  {
    // 풀링 으둜 슀폰 => KillLog 에 μžˆλŠ” SetUp λ©”μ†Œλ“œλ₯Ό λ‹€μ‹œ RPC 둜 λͺ¨λ‘μ—κ²Œ 전솑
    ObjectPooler._Instance.PoolInstantiate("KillLog").GetComponent<PhotonView>().RPC("SetUp", RpcTarget.All, attacker, _nickName);
  }
}

KillLog

1
2
3
4
5
6
7
// κ³΅κ²©ν•œ ν”Œλ ˆμ΄μ–΄μ™€ κ³΅κ²©λ‹Ήν•œ ν”Œλ ˆμ΄μ–΄ λ‹‰λ„€μž„μ„ μ„ΈνŒ…
[Photon.Pun.PunRPC]
public void SetUp(string attacker, string attacked)
{
  _attacker.text = attacker;
  _attacked.text = attacked;
}

πŸ’» Execute

3

μ‹€ν–‰μ‹œν‚€λ©΄ λ‹€μŒκ³Ό 같이 곡격, 피격 ν”Œλ ˆμ΄μ–΄ 화면에 λͺ¨λ‘ 잘 λ‚˜νƒ€λ‚˜λŠ” 것을 μ•Œ 수 μžˆλ‹€.

λ°©λ¬Έν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!😊

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°