Instantiate(gunTargetHit, raycastHit.point, Quaternion.LookRotation(raycastHit.normal));
총알이 맞은 표면의 정확한 위치에 이펙트를 배치하고, 그 표면에 수직으로 이펙트를 회전시킵니다.
raycastHit.point: 이 필드는 레이캐스트가 충돌한 정확한 지점을 나타냅니다. 따라서 이프렉트가 실제 충돌 지점에 생성됩니다.
Quaternion.LookRotation(raycastHit.normal): 이 부분은 이펙트의 회전을 설정합니다. raycastHit.normal은 충돌한 표면의 법선 벡터(표면에 수직인 방향)를 나타내며, 이 법선 방향을 기준으로 이펙트가 회전됩니다.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RayCast : MonoBehaviour
{
[SerializeField] Camera mainCam;
[SerializeField] float range = 100f;
[SerializeField] float gunDamage = 30f;
[SerializeField] ParticleSystem gunFlash;
[SerializeField] GameObject gunTargetHit;
void Update()
{
if(Input.GetMouseButtonDown(0))
{
GunFlash();
Shoot();
}
}
void GunTargetHit(RaycastHit raycastHit)
{
// 총 맞은 부위에 이펙트 생성
//GameObject hitEffect = Instantiate(gunTargetHit, raycastHit.transform);
GameObject hitEffect = Instantiate(gunTargetHit, raycastHit.point, Quaternion.LookRotation(raycastHit.normal));
// 1초뒤 파티클 삭제
Destroy(hitEffect, 1f);
}
void GunFlash()
{
gunFlash.Play();
}
void Shoot()
{
RaycastHit hit;
if(Physics.Raycast(mainCam.transform.position, mainCam.transform.forward, out hit, range))
{
print(" hit : " + hit.transform.name);
// 총 맞은 곳에 파티클 생성
GunTargetHit(hit);
//Raycast로 충돌한 오브젝트에서 EnemyHealth라는 컴포넌트를 찾아서, 그 컴포넌트를 가져옴.
EnemyHealth target = hit.transform.GetComponent<EnemyHealth>();
if (target == null)
{
return;
}
target.TakeDamage(gunDamage);
print(target.Hp);
}
}
}
유니티 총 줌인, 줌아웃, 확대, 축소 만들기 (0) | 2024.09.12 |
---|---|
유니티 죽었을때 UI 띄우기 (0) | 2024.09.12 |
유니티 AI navigation 사용, 적 추적하기, 추적 범위 확인하기 (0) | 2024.09.10 |
유니티 벽 미끄러지기 (0) | 2024.09.10 |
유니티 길찾기 알고리즘 (1) | 2024.09.10 |