Coder Social home page Coder Social logo

ecodiver's Introduction

Eco Diver

에코 다이버 - 한국기술교육대학교 2024년 졸업작품

제작진

개발 표준

언어 및 개발환경

  • 게임 엔진: Unity 2022.3
  • 스크립트: C# .NET Standard 2.1
  • 3D 모델링: Blender 4.1
  • 형상관리: Github (한글로 작성)
  • 프로젝트: JetBrains Rider (영어로 작성)

프로젝트 폴더

Assets
├── Art
│   ├── Material  # 재질 에셋 
│   ├── Model     # 모델링 파일 e.g. fbx
│   ├── Prefab    # 오브젝트 프리팹
│   ├── Sound     # 음향 효과
│   ├── Texture   # 텍스처 에셋
│   └── UI        # 인터페이스, 2D Sprite
│
├── Crest     # 오션 패키지 (수정x)
│
├── Level
│   ├── Production    # 게임에 등장하는 씬
│   └── Experiment    # 테스트 용도 
│
├── Samples   # Unity 패키지 샘플 (수정x)
│
└── Script
    ├── Display      # 인터페이스를 구현하는 스크립트
    ├── Environment  # 레벨 구성에 관여하는 스크립트
    ├── Interaction  # 플레이어 상호작용 스크립트
    └── Quest        # 퀘스트 구현에 필요한 스크립트

ecodiver's People

Contributors

lazoyoung avatar invidam avatar limbj avatar wootak123 avatar

Stargazers

 avatar Paular avatar  avatar  avatar

Watchers

 avatar

ecodiver's Issues

Ray 포인터가 UI 안에 갇히는 문제

Steps to reproduce

  • FlexXR 패널 UI 컴포넌트를 배치한다
  • XR Device Simulator 혹은 Oculus 환경에서 패널을 조작한다
  • 패널 조작을 끝내고 손을 떼어도 Ray 포인터가 패널 속에 갇혀 있다

.skp 파일 그래픽 이슈

.skp 확장자를 사용하는 3D모델이 그래픽 값을 불러오지 못하는 오류
-> 같은 계층 내에 자동으로 생성된 'Materials', 'Textures' 폴더가 존재해야함

  • Model/Harbor 내의 3개의 skp 모델을 reimport하여 폴더 내에 생성하여 해결

팔 부착형 디바이스 UI를 구현한다

견본

image

요구사항

  • #42
  • UI Toolkit을 기반으로 디바이스 인터페이스를 구현한다.
  • 표시할 정보: 현재 수심, 산소 잔여량, 진행중인 퀘스트, 퀘스트 달성 여부

퀘스트 씬 2를 구현한다

Scene 2 tasks

  • 지형 배치
  • crest 기반 해수면 setup
  • crest underwater 변경
  • 정적 오브젝트 배치
  • 동적 오브젝트(물고기, 거북이) 배치 및 동선 구현
  • 퀘스트 setup(QuestZone)
  • #90
  • #108

캐릭터 컨트롤러 오류

오류 로그

Could not get CharacterController on XR Origin (XR Rig) (UnityEngine.GameObject), unable to drive properties. Ensure there is a CharacterController on the "Rig" GameObject of XR Origin (XR Rig) (Unity.XR.CoreUtils.XROrigin).
UnityEngine.XR.Interaction.Toolkit.CharacterControllerDriver:Start () (at ./Library/PackageCache/[email protected]/Runtime/Locomotion/CharacterControllerDriver.cs:115)

문제 접근

  • DiverController 물리연산을 위해 Rigidbody를 도입한 결과 CharacterController를 사용할 수 없게 되었음
  • CharacterController는 XR 환경에서 움직일 때 Cylinder Collider가 플레이어 몸에 붙어서 잘 따라오게 만들었음
  • CharacterController의 역할을 대체하는 새로운 스크립트가 필요하다는 결론에 이름

작업 내용

  • BodyController 스크립트
  • 게임에 필요한 공통 오브젝트를 묶어 재사용 가능한 프리팹으로 제작
  • XR Interaction Setup 프리팹 이름을 XR Physics 로 변경

에셋 폴더 정리하기

  • Script
    • Collect, Placer, SoundEffect 스크립트 폴더는 Environment 하위로 이동
    • FishController.cs 파일은 InteractionEnvironment/Controller 로 이동
  • Level
    • Production: 실제로 시연할 Scene을 보관하는 폴더
    • Experiment: 테스트 용도의 Scene을 보관하는 폴더

바닷 속을 헤엄칠 수 있어야 한다

요구사항

  • 모션 인식
    • 양손을 앞뒤로 휘저으면 앞으로 전진
    • 한손을 옆으로 휘저으면 제자리 회전
  • 입력 쿨타임
  • 벡터 프로젝션 및 내적으로 가속도, 각속도 계산
  • 강체를 활용하여 유체 항력 및 가속력 구현
  • 물속에 있는지 여부 확인하기
  • 중력+부력의 작용으로 천천히 가라앉는 모션

레퍼런스

World-space UI Toolkit을 구현하는 FlexXR 도입

변경 내역

  • XR 환경에서 UI Toolkit이 동작하려면 World Space 변환이 필요
  • 해당 작업을 위탁해주는 FlexXR 에셋 도입
    • Assets/FlexXR/Scenes 경로에 데모 씬 포함
    • 사용법은 Assets/FlexXR/README.pdf 파일 참고

다음 퀘스트 장소를 알려주어야 한다

퀘스트 장소 알림 기능

  • 퀘스트 장소를 만든다.
  • 퀘스트 장소로 이동했음 여부를 판단한다.
  • 퀘스트 장소까지의 거리, 방향을 측정한다.
  • 플레이어 발바닥에 거리, 방향을 알려준다.

갈매기를 구현한다

  • 모델링
  • 매테리얼
  • 텍스처 (UV 맵핑)
  • 아마튜어(골격) 및 애니메이션

+ 유조선의 기름이 묻은 형태 추가 구현 필요

퀘스트 씬 1을 구현한다

Scene 1 tasks

  • 지형 배치
  • crest 기반 해수면 setup
  • crest underwater 설정
  • 보트 배치 후 물리법칙 적용
  • 정적 오브젝트 배치
  • 동적 오브젝트(물고기) 배치 및 동선 구현
  • 퀘스트 setup(QuestZone)
  • 쓰레기 배치 후 스크립트 부여(CollectableItem)
  • 효과음 추가(수중음, 상호작용 효과음 등)
  • 배경 지역 추가(등대와 부둣가, 민가 등)
  • #107

도구 기능을 구현한다

목표

  • 현재 사용중인 도구에 알맞은 Forearm 프리팹 적용
  • 도구 선택창을 열면 현재 사용중인 도구를 가리키도록 처리
  • 절단기 (칼) 구현
  • 헤드라이트 구현 (추후에 필요하면 추가)
  • #93
  • 그물망 (쓰레기 담는 용도)

기능 설명

  • 상황에 따라 선택해서 사용 -> #8

퀘스트 기능 및 버그 수정

  • QuestObserver는 Quest A, B, C 가 씬에 존재함을 전제로 작동함
    • 테스트용 씬에서 작업하거나 퀘스트 개수가 바뀌면 오류 발생
    • 씬에서 존재하는 Quest 개수가 몇 개든지 잘 대응하도록 수정
  • 기존 IQuest 인터페이스를 Quest 추상 클래스로 변경
    • MonoBehaviour를 상속하여 FindObjectsOfType 메소드로 탐색 가능해짐
    • 구현체에서 중복 정의하는 메소드를 묶어서 부모 클래스에 배치

Crest 오션 시스템 도입하기

비고

  • 해당 에셋은 URP 파이프라인을 지원하지 않음
  • 프로젝트 렌더링 파이프라인을 URP → BIRP(표준 파이프라인)으로 변경해야 함
  • 현재 design/#28-crest 브랜치에서 @LazoYoung 이 작업중.

참조

게임 성능을 최적화한다

  • Level of Detail 기법 적용
  • 수많은 오브젝트의 LOD 적용을 자동화하는 스크립트
  • Culling Group을 사용하여 시야에 들어오는 오브젝트만 렌더링하는 스크립트
  • 가시 거리를 제한하여 프레임 향상

VR 평균 60fps 목표치를 달성했으므로 여기서 마무리하겠습니다

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.