Giter Club home page Giter Club logo

goodluck's Introduction

3d웹 행운 프로젝트 To Be luckier

배포(vercel) : https://goodluck-steel.vercel.app/
노션 : https://best-athlete-e88.notion.site/To-Be-luckier-9b31bcbf243848249a9171c431c9af20

페이지 소개

강화하기

  • 모의 강화를 통해서 액땜을 할 수 있는 사이트
    image

운좋은 시바

  • 시바를 산책 시켜 행복한 일을 만들어 주기
  • 획득 물품 목록은 비콘 및 마이페이지에서 확인 가능하며, 로그인 시 DB에 데이터 저장
    image

헤더

  • 네비바 및 로그인 버튼 (로그인 시 유저메뉴로 바뀌며 팝업창으로 마이페이지 이동 및 비로그인)
    image

마이페이지

  • 강화 내역 및 시바 획득물품 확인
    image

기능 구현 및 트러블 슈팅

노션링크

drei/HTML 태그와 React.ContextApi의 호완성 문제 디버깅

drei의 HTML컴퍼넌트의 구현 원리에 의한 ContextApi와의 호완 문제 디버깅

시바 이동 로직 설계 및 비교

position, velocity, applyForce, wheel 의 4가지 방법을 직접 도입 및 비교하여 position 방식으로 이동 구현

웹 폰트 최적화

필요한 글리프만 추출하여 16108Kb → 22Kb로 최적화

유틸리티 타입을 활용한 타입 추출

type EventType<T> = T extends { type: infer U } ? U : never;

type ShibaEventType = {
  [K in keyof typeof SHIBA_EVENT]: EventType<(typeof SHIBA_EVENT)[K][number]>;
}[keyof typeof SHIBA_EVENT];

기술 스택



폴더 구조

폴더 구조에 대한 생각 및 피드백

┣ 📂app                     : Next.js 앱 라우터에 의해 관리되고 라우팅 구조를 정의하는 코드
┣ 📂features                : 페이지 별로 코드를 관리
┃ ┣ 📂enforcement           
┃ ┃ ┣ 📂components          
┃ ┃ ┣ 📂hooks
┃ ┣ 📂 ... 
┣ 📂public                  : asset 관리
┃ ┣ 📂font
┃ ┣ 📂images
┃ ┣ 📂models
┣ 📂remote                  : Firebase와 API 통신을 위한 코드
┃ ┣ 📂models                : Firebase와 API 통신에 필요한 데이터 모델 정의
┣ 📂shared                  : 공유되는 코드
┃ ┣ 📂components
┃ ┃ ┣ 📂3dmodel
┃ ┃ ┣ 📂header
┃ ┃ ┣ 📂portal
┃ ┣ 📂constants            
┃ ┣ 📂hooks                 
┃ ┣ 📂styles
┃ ┗ 📂utils
┗ 📂store                   : 전역 변수 상태 관리

파이어베이스 data 구조

USERS
└── userId (Document)
├── ENFORCEMENT (Sub-Collection)
│ └── id (Document)
│ ├── date(fieldA): TimeStamp
│ ├── percent(fieldB): number
│ └── status(fieldC): string
└── SHIBA (Sub-Collection)
└── id (Document)
│ ├── date(fieldA): TimeStamp
└── type(fieldB): string

👉🏻 기타 이미지출처

https://pxhere.com/

goodluck's People

Contributors

suhong99 avatar

Watchers

 avatar

goodluck's Issues

강화 페이지 작업하기-1 (배경)

배경 대장간 느낌 이미지 --> 우주 느낌으로

  • 칼을 가운데 이미지로
  • 성공 실패를 어떻게 알리냐? .. sound는 추후 작업
  • 성공시 : 노란색 빛? -->
  • 실패 시 : 검이 까맣게?

image
아래 반짞이는건 sparkles인데 안 예쁜듯.. 제거예정

캐릭터 이동 로직 변경

현재로직 : 바라보고 있는 방향으로 전진
문제점 : 오르막길을 제대로 전진하지 못함. --> 경사 문제였음.

가이드 메뉴얼 세부내용

가이드 내용 추가
만약 다시 보지 않기 클릭 되었을 경우 메뉴얼 생략

#92 에서 테스트 용으로 바꿨떤 이벤트 시간도 돌리기

3d모델 로딩하기

  1. 훅을 사용하니깐 클라이언트 컴퍼넌트
  2. 모델 glb파일 로딩하기
  3. 렌더링 확인

이벤트 발생 로직 개선

#80

위치를 통해서 감지를 하는데, 강 위에 떠 있는 경우가 애매함.

해결방법 : 점프 와 착지 상태를 나눈다..
점프 중일 때는 이벤트가 발생하지 않도록
착지 이후 부터 발생하도록

그런데 착지라는 정의가 애매함.. -> 충돌하였을 때를 착지로 고려..

이벤트 생성하기

이벤트 생성하기

좌표를 통한 구분
문제점 : 점프를 한 다음에 이벤트가 발생되는 상황이 애매함. 충돌을 통해 착지를 감지해야하나??

모달을 통해 우선 이벤트가 나오게 했음.
관련 이미지, 확률 태그를 통해 모달 디자인 하기

시바 캐릭터 회전이동 버그픽스..

문제점 : 각도가 죄측 90도 이동시 -파이/2 우측 90도 이동시 + 파이/2 로 회전값을 가진다.
그렇기 때문에 경계점에서 반대로 계산을 하지 않으면, 90도 이상 회전을 안함.

해결방법 :

      rx >= 0 ? (ry -= delta) : (ry += delta);

경계점에서 rx의 부호가 음과 양으로 달라짐을 확인하고 이를 통해서 조건ㅁ누을 통해 계산

waring

vercel/next.js#22388

image

이슈를 확인해보니 chrome extension과 충돌이 일으켜서 그런 것이었다. 해당 extension오류로 extension삭제시 정상작동

자잘한 픽스

  1. 폴더 명 대문자 -> 소문자
  2. 반응형 크기 var로 사용하기

웹뷰에서 Header 만들기

  1. 좌측 상단에 링크들로 페이지 이동 가능
  2. 우측 상단의 버튼으로 로그인 및 마이페이지 이동할 버튼 UI

움직일 경우 이벤트 적용하기

움직일 경우 이벤트 적용하기 (2번 채택)

  1. 구상 충돌할 경우에 이벤트 타입 변경
    각각의 충돌체는 충돌 그룹이 있으므로 이를 통해구별
    ex) 문제점 : 경계선에서 충돌이 애매함. 만약에 바닥에 붙은 상태에서 다른 그룹과 충돌이 된 경우
 const handleCollision = (e) => {
    if (e.collisionFilters.bodyFilterGroup === 5) {
       //code
    }
  };
  1. 좌표를 통한 구분
    강의 경우에는 높이가 일정 이하
    그 외에는 좌우를 통해서 구별함
 const checkMapType = () => {
    const chassisPosition = new Vector3().setFromMatrixPosition(
      chassisBody.current!.matrixWorld
    );
    // 강 y가 1보다 작은경우 그 중에서 x가 10.5보다 크고 z가 3.5가 큰 경우는 언덕
    // x가 2.5보다크면 언덕 작으면 집
  };

zustand를 활용하여 이벤트 여부 전역변수 관리

로딩처리 커스텀하기

로더가 현재 캔버스가 랜더링된 후에 작동함 --> 캔버스거 렌더링 과정을 로딩 처리할 필요가 있음
image

SSR되는 부분까지 loader가 덮음(화면 전체 로딩처리라서)

전체적 레이아웃 마무리하고 재수정 ( 헤더를 캔버스 안에 넣을지 말지에 대한 고민,, )

배경에 충돌체 집어넣기 -(건물 다리)

[x] 집에 충돌체 만들기
[x] 언덕 만들기
[x] 투명 바닥만들기
[x] 투명 벽으로 감싸기
[x] 다리
62-4 버그 픽스
schteppe/cannon.js#149

  1. 음수 요소가 버그를 낼 수 있다는 이슈가 있어서 양수로 수정
    image
  2. normal가 내부를 향해서 오류가 발생
  function calculateNormal(v0, v1, v2) {
    const vector1 = [v1[0] - v0[0], v1[1] - v0[1], v1[2] - v0[2]];

    const vector2 = [v2[0] - v0[0], v2[1] - v0[1], v2[2] - v0[2]];

    const normal = [
      vector1[1] * vector2[2] - vector1[2] * vector2[1],
      vector1[2] * vector2[0] - vector1[0] * vector2[2],
      vector1[0] * vector2[1] - vector1[1] * vector2[0],
    ];

    const length = Math.sqrt(
      normal[0] * normal[0] + normal[1] * normal[1] + normal[2] * normal[2]
    );

    return [normal[0] / length, normal[1] / length, normal[2] / length];
  }

  const normals = faces.map((face) => {
    const [v0, v1, v2] = face.map((index) => vertices[index]);
    return calculateNormal(v0, v1, v2);
  });

  console.log(normals, 'normals');

해당 값을 반영했지만 충돌이 제대로 안됨

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.