Files
Learning-UnityNGO/Assets/CONTENT/FEATURES/DEV-TEST/Scripts/PlayerShoot.cs
T

50 lines
1.3 KiB
C#

using Unity.Netcode;
using UnityEngine;
public class PlayerShoot : NetworkBehaviour
{
[SerializeField] float damageAmount = 10f;
[SerializeField] float range = 100f;
[SerializeField] Transform cameraRoot;
[SerializeField] GameObject hitEffectPrefab;
void Update()
{
if (!IsOwner) return;
if (Input.GetMouseButtonDown(0))
{
ShootServerRpc(cameraRoot.position, cameraRoot.forward);
}
}
[ServerRpc]
private void ShootServerRpc(Vector3 _origin, Vector3 _direction)
{
Collider[] ownerColliders = GetComponentsInChildren<Collider>();
if (Physics.Raycast(_origin, _direction, out RaycastHit _hit, range))
{
if (System.Array.Exists(ownerColliders, c => c == _hit.collider))
{
return;
}
if (_hit.collider.TryGetComponent(out PlayerHealth _playerHealth))
{
_playerHealth.TakeDamage((int)damageAmount);
}
SpawnHitEffectClientRpc(_hit.point);
}
}
[ClientRpc]
private void SpawnHitEffectClientRpc(Vector3 _hitPosition)
{
Debug.Log($"Spawning hit effect at {_hitPosition}");
NetworkBehaviour.Instantiate(hitEffectPrefab, _hitPosition, Quaternion.identity);
}
}