Ray(시선)를 이용해서 닿은곳에 총을 쏘고싶다.
// 만약 마우스 왼쪽버튼을 누르면
if (Input.GetButtonDown("Fire1"))
{
// 시선을 만들고
Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward);
// 그 시선을 이용해서 바라봤는데 만약 닿은곳이 있다면?
RaycastHit hitinfo;
if (Physics.Raycast(ray, out hitinfo))
{
// 닿은곳에 총알자국을 가져다놓고싶다.
bulletImpact.transform.position = hitinfo.point;
}
}
Ray : 시선 생성
RaycastHit : Ray가 닿은 판정인 곳
Ray가 나오는 위치를 정확하게 하기 위해 UI에 crosshair 추가
Bullet VFX 사용
https://assetstore.unity.com/packages/vfx/particles/war-fx-5669
VFX가 닿은 모든 면에 수직으로 발생하게 수정
if (Physics.Raycast(ray, out hitinfo))
{
// 닿은곳에 총알자국을 가져다놓고싶다.
bulletImpact.transform.position = hitinfo.point;
// 총알자국 VFX를 재생하고싶다.
bulletImpact.Stop();
bulletImpact.Play();
// 총알자국의 방향을 닿은곳의 Normal방향으로 회전하고싶다.
// = 총알자국의 forward방향과 닿은곳의 Normal방향을 일치시키고 싶다.
bulletImpact.transform.forward = hitinfo.normal;
}
Gun 전문
더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// Ray를 이용해서 바라보고 닿은곳에 총을 쏘고싶다. (총알자국을 남기고싶다.)
public class Gun : MonoBehaviour
{
// 총알자국
public ParticleSystem bulletImpact;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
// 만약 마우스 왼쪽버튼을 누르면
if (Input.GetButtonDown("Fire1"))
{
// 시선을 만들고
Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward);
// 그 시선을 이용해서 바라봤는데 만약 닿은곳이 있다면?
RaycastHit hitinfo;
if (Physics.Raycast(ray, out hitinfo))
{
// 닿은곳에 총알자국을 가져다놓고싶다.
bulletImpact.transform.position = hitinfo.point;
// 총알자국 VFX를 재생하고싶다.
bulletImpact.Stop();
bulletImpact.Play();
// 총알자국의 방향을 닿은곳의 Normal방향으로 회전하고싶다.
// = 총알자국의 forward방향과 닿은곳의 Normal방향을 일치시키고 싶다.
bulletImpact.transform.forward = hitinfo.normal;
}
}
}
}
'공부 > Unity 기초' 카테고리의 다른 글
3D FPS - 5 / 상태머신 설계 (0) | 2022.05.18 |
---|---|
3D FPS - 4 / 가리키는 대상 표시 (0) | 2022.05.18 |
3D FPS - 2 / 시점 변화 (0) | 2022.05.17 |
3D FPS - 1 / 이동과 회전, 점프 (0) | 2022.05.17 |
2D 슈팅 - 9 / 누적점수에 따른 속도변경 (0) | 2022.05.17 |