공부/Unity

오디오 믹서, 카메라 제한, 총 데이터, 총, 슈터

월러비 2025. 9. 9. 18:29
  • 마우스의 포지션을 월드포지션으로 변환 → 바닥과의 충돌을 검사
  • 유니티에서 카메라를 비출때 카메라와 월드 사이에는 ‘투영면’이 하나 보이지않게 있다.
    • 이 화면이 사용자가 마우스로 클릭되는 화면이다.
    • 마우스 클릭 후 투영면에는 점이 하나 생기고 그곳부터 z축으로 방향이 하나 생기는 것이다.
    • 해당 방향으로 레이캐스트를 쏘면 3D 상에 충돌하는 점이 3D상의 좌표가 되는 것이다.
    • 그런데, 이렇게하면 화면상의 좌표계와 카메라상의 좌표계가 맞지 않게된다.
      • 카메라가 사선으로 보고있을수도 있고, 카메라가 회전했다면 월드 좌표의 회전과 맞지 않을수 있기 때문이다.
    • 해결 방법 : Transform에 좌표계를 스크린좌표 ↔ 월드좌표를 변환하는 함수가 있다.
      • 스크린 좌표를 월드 좌표로 변환하는 과정을 거쳐야한다.
Ray cameraRay = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(cameraRay, out RaycastHit hit, float.PositiveInfinity, groundMask))
{
    Vector3 pos = hit.point;
    pos.y = transform.position.y;
    transform.LookAt(pos);
}

오디오 믹서

  • bgm mixer
  • sfx mixer
  • 믹서들로 브금, 효과음 별로 그룹을 엮어서 슬라이더를 이용하여 볼륨을 설정할 수 있다.
public AudioMixer audioMixer;
public Slider bgmSlider;
public Slider sfxSlider;

public void SetMusicVolume(float volume)
{
    audioMixer.SetFloat("Music", Mathf.Log10(volume) * 20);
}

public void SetSFXVolume(float volume)
{
    audioMixer.SetFloat("SFX", Mathf.Log10(volume) * 20);
}

카메라 제한

  • Cinemachine Comfinder 3D로 벽 밖으로 나가지 못하게 제한할 수 있다.

총 데이터

  • 발사 소리
  • 데미지
  • 발사 간격 : timeBetFire
  • 사정 거리 : fireDistance
[CreateAssetMenu(fileName = "GunData", menuName = "Scriptable Objects/GunData")]
public class GunData : ScriptableObject
{
    public AudioClip shootClip;

    public float damage = 25f;
    public float timeBetFire = 0.12f;
    public float fireDistance = 50f;
}

  • 상태
  • 현재 상태
  • 총 데이터
  • 이펙트
  • 라인 렌더러
  • 오디오
  • 발사 위치
  • 마지막 발사 시간

슈터

  • 총 스크립트
  • 리지드 바디
  • 총 콜라이더
  • 인풋
  • 총 위치