- 마우스의 포지션을 월드포지션으로 변환 → 바닥과의 충돌을 검사
- 유니티에서 카메라를 비출때 카메라와 월드 사이에는 ‘투영면’이 하나 보이지않게 있다.
- 이 화면이 사용자가 마우스로 클릭되는 화면이다.
- 마우스 클릭 후 투영면에는 점이 하나 생기고 그곳부터 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;
}
총
- 상태
- 현재 상태
- 총 데이터
- 이펙트
- 라인 렌더러
- 오디오
- 발사 위치
- 마지막 발사 시간
슈터
- 총 스크립트
- 리지드 바디
- 총 콜라이더
- 인풋
- 총 위치
'공부 > Unity' 카테고리의 다른 글
| NuGetForUnity, CSVHelper, Resources, 에디터 커스터마이징 (0) |
2025.09.09 |
| Json, 외부 라이브러리 사용법 (0) |
2025.09.09 |
| UI, 포스트 프로세싱, 아이템 스폰 (1) |
2025.08.28 |
| Navigation, NavMesh Agent, 타겟 탐색 (2) |
2025.08.28 |
| Slider, Model 크기 변경, Item (5) |
2025.08.26 |