2025유니티수업

0625 비주얼 스튜디오 코드, 깃허브, 유니티(오쿨루전 컬링) , 유니티 button navigation

버스창문 2025. 6. 25. 17:21

Explorer : 폴더 열기

Extensions : 확장 프로그램

 

 

VS Code에서 Node.js 코딩 하게 해주는 확장 프로그램

 

 

 

_____________________________________________________________________

리액트 프로젝트 다운로드 클론

 

 

WD@WINDOWS-IN3N7LQ MINGW64 ~/Desktop/KYS/MyGitHub/react_test (KYS)
$ Git config core.autocrlf true

WD@WINDOWS-IN3N7LQ MINGW64 ~/Desktop/KYS/MyGitHub/react_test (KYS)
$ git config core.eol lf

WD@WINDOWS-IN3N7LQ MINGW64 ~/Desktop/KYS/MyGitHub/react_test (KYS)
$ git config core.autolf input

그냥 외워놓는다고 하시고 어떤 기능인진 말 안해줬음

누르면 경로 잡아줌

 

이거로 별 달리 뭘 하진 않았음

 

 

Gitignore

node_modules를 예시로

너무 많은 파일들이 있는데 이걸 또 올릴 이유가 없어서

이를 제외해주는게 Gitignore

 

 

 

.env 생성

 

-> 이 파일에 토큰이나 패스워드 와 같은 정보를 저장

토큰이나 패스워드는 깃허브에 업로드되어서는 안된다.

그러므로 Gitignore에 등록해서 파일이 추적되거나 이력관리가 되지 않도록, 업로드도 되지 않도록

ignore에 env를 추가해야 한다.

 

 

 

.env에 * 찍으면 저 아래 env시리즈들 전부 포함함

 

 

 

Git bash에서 아까 new  에 새로 만든걸 경로로 잡음

 

npm install

npm run start

 

3001인 서버가 새로 뜸

 

 

______________________________________________________________________

 

오쿨루전 컬링(Occlusion Culling) : 한물체가 다른 물체를 가리는 것

Culling : 제거(렌더링 안하기)

 

 

 

메인 카메라에서 occlusion Culling 체크

 

 

 

벽이랑 땅에다가 occluder(가리는 물체), occludee(가려지는 물체) 체크

 

베럴들도 체크

 

 

키면 인스펙터 창 있는 쪽에 나옴

 

Bake

 

 

 

시야에 안들어오는 애들이 씬화면에서도 사라지는걸 알 수 있음

 

 

 

무기 교체

 

교체를 터치하면 무기가 교체되고, 총 쏘는 사운드, 장전 사운드, 무기 메시등을 바꾸도록

UI를 만들어둠

public void OnChangeWeapon()
{
    this.curWeaponType = (eWeaponType)((int)++this.curWeaponType % 2);
    weaponImageUI.sprite = this.weaponIcons[(int)this.curWeaponType];
}

버튼에 할당

 

 

변경은 되지만 변경할때도 마우스 클릭이라 총이 발사되는 문제가 있었음

    void Update()
    {
        if (EventSystem.current.IsPointerOverGameObject()) return; 
        //버튼에 닿았다면 하위 코드 생략
        //이벤트 훅(Event Hook) 이라고 함

 

 

안보이게 해놓은 dim이미지 등이 막아 아예 발사가 안되는 문제가 있었음

Raycast Target체크해제

ui등을 누를때만 발사가 안됨

 

 

일시정지

    public void OnPause()
    {
        isPaused = !isPaused;
        Time.timeScale = isPaused ? 0 : 1; //멈추면 0, 아니면 1

        var playerObj = GameObject.FindGameObjectWithTag(player);
        var scripts = playerObj.GetComponents<MonoBehaviour>(); // 플레이어에 붙은 모든 코드
        foreach (var item in scripts)
        {
            item.enabled = !isPaused; // 멈춰있다면 비활성화 하도록
        }
    }

 

버튼 만들어서 저렇게 넣음

 

 

일시정지 눌렀는데 무기는 바뀌는 문제가 나옴

 

 

 

무기교체 버튼에 Canvas Group 넣음

Alpha : UI의 알파값

Interactable : 상호작용 활성화 여부

 

UI를 껐다켰다 하는거 할거면 게임오브젝트를 직접 끄는게 아니라 저걸 건드리는것

 

public void OnPause()
{
    isPaused = !isPaused;
    Time.timeScale = isPaused ? 0 : 1;

    var playerObj = GameObject.FindGameObjectWithTag(player);
    var scripts = playerObj.GetComponents<MonoBehaviour>();
    foreach (var item in scripts)
    {
        item.enabled = !isPaused;
    }
    
    
    //아래 부분 추가
    var canvasGroup = panel_Weapon.GetComponent<CanvasGroup>();
    canvasGroup.blocksRaycasts = !isPaused;
}

 

blocksRaycasts = true면 얘가 마우스등으로 누를수 있는 상태, Ray를 얘가 받아내서 만약 얘 뒤에 뭐 있으면 걔는 못누름

 

 

 

인벤토리

 

Grid Layout Group

 

열에 다 맞춰줌

 

위치 조정용 변수들

 

 

 

드래그 만들기

 

public class Drag : MonoBehaviour,IDragHandler
{
    

    void Start()
    {
        
    }

    //드래그 이벤트
    public void OnDrag(PointerEventData eventData)
    {
        this.transform.position = Input.mousePosition;
    }
}

드래그하면 위치를 마우스 위치로

그리드가 위치를 계속 원래대로 돌려서 잘 안되는걸 확인함

, IBeginDragHandler, IEndDragHandler // 상속 추가    
    
    
    public void OnBeginDrag(PointerEventData eventData) //드래그 시작
    {
        this.transform.SetParent(this.inventoryTr);
    }

    public void OnEndDrag(PointerEventData eventData) //드래그 끝
    {

    }

 

 

한번 끌고나면 망가지는걸 확인함

 

drop이라는 새로운 스크립트를 슬롯에 전부 부착

public class Drop : MonoBehaviour, IDropHandler
{

    public void OnDrop(PointerEventData eventData)
    {
        if (this.transform.childCount == 0)
        {
            Drag.draggingItem.transform.SetParent(this.transform, false); // false : 로컬 트랜스폼인지 아니면 월드인지
        }
    }
}

 

놨을때 슬롯쪽에 붙게 설정

슬롯쪽에 안놨을때 망가짐

    public void OnDrag(PointerEventData eventData) // 드래그 중
    {
        this.transform.position = Input.mousePosition;
        
    }

    public void OnBeginDrag(PointerEventData eventData) //드래그 시작
    {
        this.transform.SetParent(this.inventoryTr);
        draggingItem = this.gameObject; // 드래그가 시작되면 드래그 되는 아이템 정보를 저장함
        this.cvGroup.blocksRaycasts = false; // 드래그가 시작되면 다른 UI 이벤트를 받지 않도록 설정
    }

    public void OnEndDrag(PointerEventData eventData) //드래그 끝
    {
        draggingItem = null;
        this.cvGroup.blocksRaycasts = true; // 드래그가 끝나면 다시 UI 이벤트를 받게 설정

        //슬롯에 드래그 되지 않았을 경우, 원래대로 돌아온다.
        if(this.transform.parent == this.inventoryTr)
        {
            this.transform.SetParent(this.itemListTr.transform);
        }
    }

 

슬롯쪽에 붙였을때 정렬이 안됨

grid layout 추가

 

 

Item에 Canvas Group이 부착되어있지 않으면 slot쪽에 부착되지않는다.

 

 

_______________________________________________________________________

 

어지간하면 건드리면 안되는 곳

Fixed Timestep : 숫자를 낮추면 Fixed Update를 더 빠른 주기로 돌게함

 

 

_____________________________________________________________________

 

버튼들을 연결시켜주는 내용

그 막 탭누르면 다음버튼 가는 그런느낌인데

horizontal -> 좌우 이동

vertical -> 상하 이동

버튼 한번 누르면 Navigation설정 된 애들끼리 방향키로 조절되면서 스페이스바로 클릭이 되게 됨