출처 : 
https://docs.unity3d.com/Manual/EditingValueProperties.html

Numeric field expressions
Hidden Inspector feature Expression Evaluator

연산자 중 희귀한 거

 

 


L(a,b)
a와 b 사이의 나란히 하나씩 할당
한 줄씩 똑바로 세워줌

예시 ㅡ 
X 좌표에 L(-6,6) 입력 시 선택된 10개의 캡슐이 -6에서 6 사이에 분포

 

 



R(a,b)
a와 b 사이의 무작위 값

예시 ㅡ 
 Z 좌표에 R(-2,2) 입력 시 -2에서 2 사이의 무작위 Z 좌표 설정

 

 



연산자 +=, -=, *=, /= 
현재 값에 추가 수정

예시ㅡ
Z 좌표에 /=3 입력 시 모든 Z 좌표가 1/3로 감소

 

 


수학 표현식 조합

예시 ㅡ
X 좌표에 cos(L ( 0,2*pi ) ) *5, 
Z 좌표에 sin(L (0,2pi) ) *5 
입력 시 선택된 10개의 캡슐이 원형으로 배치됨

 

 

+

 

sin 사인 을 이용 하면 지그재그 배치가 가능함

 

 

+



인디갤러의 추가 말씀 :

Floor(a) 버림
3.1 을 3으로 만듦

Ceil(a) 올림
3.1 을 4로 만듦

Round(a) 반올림
3.6 을 4로 만듦
3.1 을 3으로 만듦



반응형
Posted by 이름이 익명
:

 

 

 

번식 VS 사냥

 

둘을 따로 떼어 놓아야 

인간은 살 수 있기 때문임

 

 

호랑이에게 성적 매력을 느끼면 그대로 잡혀먹기 때문임

 

 

+

 

 

야한 게임이 인기 있는 컨텐츠 였으면

 

롤 야한 버전 모드가 엄청 인기 많았어야 함

롤 야한 후속 컨텐츠가 엄청 많이 돌아다녔어야 함

 

하지만 지금 봐라

 

남자들은 롤 따로 야한 거 따로 즐김

 

둘을 같이 한번에 안 즐김

 

 

야한거랑 게임이랑 같이 즐기는 건

아이스크림과 스테이크를 한번에 섞어 먹는 거임

 

짬통 먹는 느낌이 되버림

 

 

 

+

 

 

그래서 컨텐츠는 크게

야한거 안 야한거 두가지로 나뉜다 볼 수 있음

 

야한거   안 야한 게임
     
비디오, 이미지   게임
플레이 버튼만 있어도 충분함   상호작용 풍부함
     
검열 없음   사타구니 검열 있음
     
똥, 고어, 연령대
이런 카테고리 세세히 나눠져야 함
  RPG, 실시간, 턴제 
이런 카테고리 세세히 나눠져야 함

 

 

+

 

 

만약 니가 게임 개발자라면

 

고툭튀 과감히 버려라

액체 표현 과감히 버려라

 

 

야한 거보단

게임성에 집중해라

 

 

+

 

야한거 굳이 만들고 싶음

익명의 팬인척  룰34 가서 그림 팬아트나 올려라

 

 

야겜은 만들지 마라

야겜은 꼴림그림 보기에 너무 번거로워서 짜증남 

 

 

 

반응형
Posted by 이름이 익명
:

 

 

https://www.models-resource.com/mobile/marvelscontestofchampions/model/15340/

 

Mobile - Marvel's Contest of Champions - Juggernaut (Classic) - The Models Resource

 

www.models-resource.com

 

 

반응형
Posted by 이름이 익명
:

 


https://docs.febucci.com/text-animator-unity/effects/built-in-effects-list
리스트 보러 가기

 

 

 

Behavior Effects : 계속 반복 지속되는 효과

appearance : 처음만 등장하고 끝나는 효과

Disappearance : 사라질 때 나오는 효과들

 

 

Behaviors: <tag> to open, </tag> to close

Appearances: {tag} to open, {/tag} to close

Disappearances: {#tag} to open, {/#tag} to close

 

 

+

 

 

평상시 ui 만들듯 텍스트 canvas - ui - tmp 생성해주고,

 

 

Behaviors 사용시 저 두개 컴포 필요 Appearances 사용시 저 세 컴포넌트가 필요
   

 

 

+

 

 

Appearances 사용하는

대사문 입력 세팅 예시 :

 

 

 

저 Default Tags 가

전체 문장 구간에 글자효과를 적용한다는 거임

 

 

난 그냥 한글자씩 공개를 원하니까 

size , effects count 는 1로함

 

 

 

 

+

레전드 오브 마나 , classic 방식의 한글자 한글자 공개는

appearance ,  size , amplitude 1

 

 

 

 

type writer 에는 한 글자씩 공개인 by character 와

단어묶음씩 공개인 by word 가 있다

 

 

tmp - main settings - type writer starts automatically  체크 할 것

 

 

 

+

 

특별한 문장만 변형하고 싶을 때 저런 꺾쇠를 특정 구간에 넣어 사용함

 

 

특정 구간 옵션 조절은 저렇게 a f w 등의 한글자를 응용함

이것도 리스트에 다 있음

 

a = 강함의 정도

f = 빠르기

w = 웨이브 크기

 

자세한건 : 

https://docs.febucci.com/text-animator-unity/effects/built-in-effects-list

 

 

+

 

use dynamic scaling 아래 refence font size 

10 이렇게 작으면 효과가 커지고

70 이렇게 수를 올리면 효과가 적어짐

 

 

+

 

 

Text Animator 컴포넌트 아래 ▶ preview 누르면 실시간 미리보기 가능

 

 

 

이렇게 미리보기를 사용해서 

Behaviors  (루프 애니) a f w 옵션 값을 실시간 조정 가능

 

 

 

 

+

 

활용 할 곳 :

 

ㅇ 크리티컬 글자 효과

 

ㅇ 라그나로크 같은 데미지 표기 효과 (인디케이터)

 

ㅇ 평상시 대사문 

 

 

 

 

+

 

 

바이 캐릭터 / 바이 워드 차이

 

Typerwriter - By Character Typerwriter - By Word
size, amp 1  size, amp 1 
한글자씩 단어별
기본 디폴트 같음 딱딱함

 

 

+

 

 

!  ...   ?

 

이런 마침표 넣으면 대기 시간이 생김

 

 

+

 

구매 페이지에 더 많은 팁이 있음

 

 

 

https://assetstore.unity.com/packages/tools/gui/text-animator-for-unity-254677

 

Text Animator for Unity | GUI 도구 | Unity Asset Store

Use the Text Animator for Unity from Febucci Tools on your next project. Find this GUI tool & more on the Unity Asset Store.

assetstore.unity.com

 

 

 

 

 

반응형
Posted by 이름이 익명
:

https://www.youtube.com/watch?v=d7dyDObTpBo&ab_channel=%EA%B3%A8%EB%93%9C%EB%A9%94%ED%83%88

 

영상 보러가기

 

+

 

   

 

 3D 모델링, 리깅, 애니 전부 블렌더에서 작업해야함

 

+

 

블렌더 리깅 (오로 리그 프로) 팁 

더보기 클릭 

더보기

 

 

 

매치 투 리그

 

 

 뼈 처음 생성 후 skin - bind 를 해야 함

 

 뼈 수정은 

에디트 모드로 하는 게 아니라

edit reference bones

 

뼈 수정 다했으면 match to rig 로 끝내기

 

 

중간 척추는

shift ctrl S 눌러서 

cursor to select 이용해서 두개 띄어진 척추 붙여주기

 

 

 

 

뼈들 전체 선택후 ㅡ 노란 아이콘 ㅡ in front

 

 

 

허리 돌려볼 때 깨지는 게 없어야 함

 

 

 

 

 

+

 

둥근 모델을 만들고 싶다면, 모델링 팁

 

ㅇ 스컵팅으로 처리

ㅇ 모서리 부분 베벨 적용

ㅇ 스무스 셰이더 적용

ㅇ 섭스 해서 면 나눠서 하이폴리로 만들기

 

 

 

+

 

 

하나의 모델. 하나의 아마추어

레이어 페어런트는 대략 이러한 구성으로 되어있음

 

 

 

애니메이션 만들땐 , dope sheet,  Action Editor 를 사용해 

 

본의 회전과 이동을 이용함

키프레임 구간별 포즈 to 포즈 로 만듦

 

 

 

 

레이어 여러개 저런식으로 만듦

 

 

+

 

 

Blender -> Unity model export

블렌더에서 유니티로

3D 모델 및 리깅 및 애니메이션 이동법

 

 

 

애니메이션 리깅 포함하고 싶을 땐

페어런트 맨 위 상위에있는 아마춰를 클릭 후

 

 

Z 는 -90 도로 회전

 

뼈와 메쉬 다 선택후

 

export - auto rig pro fbx - 

 

 

 

add dummy mesh 는 끔

 

+

fbx 로 내보내기 전 

아마추어 제외한 모든 모디파이어를 적용 해야 한다카더라

 

+

 

소속된 애니메이션 여러개면

only active 를 체크 해제

 

 

(

 

리깅 없이, 애니 없이 메쉬만 출력하고 싶다면

 

블렌더에서 캐릭 리깅 모디파이어 적용 후 메쉬만 선택

 

블렌더 ㅡ file ㅡ export ㅡ FBX 클릭

 

Limit to Selected Objects 옵션 클릭
선택한 오브젝트만 넘기겠다는 뜻

apply transform 을 셀렉해야
유니티에서 눕혀지는 걸 방지함

 

Y가 위로 가야함

다른 옵션 안 건드리면 끝

 

)

 

+

 

텍스쳐

 

uv 및 텍스쳐는 하나의 파일로 통일 시켜놔야 함

모델의 각 부위가 해당하는 이미지 구역이 겹치지 않게 잘 짜놔야 함 

 

 

에셋 오브젝트 클릭후 materials 추출 ?

 

C:\Users\유저이름\0000111\Assets\Material

이렇게?

 

아님, 새 마테리알을 유니티에서 만듦

그리고 base map 에 1장짜리 텍스쳐 설정

 

 

+

 

 

fbx 파일을 Assets 로 드래그

 

 

이렇게 정면을 보게 해야 성공

 

+

 


모델에 텍스쳐가 있을 시, 텍스쳐 유니티로 옮기는 법


추출할 Textures 폴더와

파일명.fbx 두 파일을 동시에 같이 선택 후

유니티 assets 모여져 있는 아래쪽 칸에 드래그 함

유니티 안에서
불러온 모델에서▶키를 누르면 해당 모델의 텍스쳐를 볼 수 있음

텍스쳐 제대로 적용 안되면
유니티에서 material 생성해서 손 봐줘야 함
가져온 텍스쳐를 albido 로 드래그해서 적용


가져온 normal map 있다면 이것도 드래그 해서 적용

 

+

 

 

플레이어 오브젝트 어셋 옆 화살표 열어서 어떤 애니가 속해있는지 볼 수 있음

 

그리고

 

플레이어 오브젝트 제일 왼쪽거 클릭하면

아래와 같은 애니메이션 창 볼 수 있음

 

 

+

 

 

그 모델에게

 

Animator 컴포넌트 넣기

 

 

애니메이터 컨트롤러도 넣기

 

 

 

애니메이터 컴포넌트에 애니메이션 컨트롤러 지정하기,

 

 

idle은 베이스 레이어 초록색 Entry 에 넣기

 

 

+

 

애니메이션 컨트롤러 세부사항 수정하기

 

 

 

Clibs 가 블렌더 내에 있던 액션에디터, 에니메이션 레이어임

 

 

armature|idle 을 idle 로 이름 정리 하기

 

 

아래 보면

Loop time 옵션 체크해서  무한반복으로 지정 가능

 

+

 

 

해당 모델 콤포넨트에 Animator 추가

 

어셋 창에서 Create - Animation - Animation Controller 추가

 

 

애니메이터에 컨트롤러 드래그해서 할당

 

+

 

상단 Animator 창 Animator Controller - Open

 

둘 중 하나의 방식으로 열면 에니메이터 노드 창이 열림

 

 

 

+

 

 

모델 옆 화살표를 연 후 , 

세모모양 idle 애니메이션 있나 확인후

 

 

그 애니메이션을 상단 에니메이터 창으로 드래그

 

Entry ~ idle 애니메이션 두개를 연결시켜야 함

 

 

 

 

완성되면 플레이 모드 진입시

모델이 바로 자동으로 idle 애니 반복 되어야 함

 

+

 

 

아래 에셋 - 애니메이션 미리 보기 중

 

 

idle 후 run 애니 변경될 때 어색 하면

 

왼발이 앞으로 나갈건지 오른발이 앞으로 나갈건지 요리조리 바꿔보면 됨

 

그건 cycle offset 을 변경해보며 할 수 잇음

 

 

 

그리고 animator 에서 해당 애니메이션 speed 를 조절하면

어색한거 어느정도 줄일 수 있음

 

 

+

 

 

 

 

3d 캐릭 모델(관절 및 애니메이션 동봉된 모델) 변경법

 

해당 모델 에셋윈도우칸에서 우클 - show in explorer - 해당 폴더 열어서 같은 이름으로 덮어 씌우기 

 

무식한 방법이지만 이렇게 해야 편함

 

단, 이 방법 쓸 때, 새 애니메이션 레이어가 생성되면 

오브젝트 에셋 눌러서 애니메이션 한번씩 체크 해야함

 

 

새로운 애니메이션 하나씩 블렌더 도프에디터에서 만들면

유니티에선 저렇게 플러스 버튼으로 하나씩 추가 해줘야 함

 

 

+

 

fbx 를

유니티 어셋창으로 드래그한 후 

기존 fbx를 삭제하는. 이런 교체 방식은 설정값들을 다시 여러개 지정해줘야 해서 불편함

 

fbx 가 아니라 

.blend 파일 불러오는건 인식 안되고 여러 잡 버그가 있음

오토리깅 프로랑 연동 안되는 거 같음

 

 

 

 

반응형
Posted by 이름이 익명
:

 

유니티ㅡ 프로젝트 세팅 ㅡ 에디터 ㅡ 게임 오브젝트 네이밍 ㅡ 언더바로 설정

 

 

이래야 이름 다루기 편해짐

 

+

 

 

프로젝트 세팅 ㅡ input action 에선

기본으로 wasd 가 ↑←↓→  키와 동일하게 캐릭 움직이는 역할로 쓰이게 되어있음

 

 

 

+

 

 

프로젝트 세팅 ㅡ 타임라인 에서 보면

기본 게임 프레임은 60 프레임으로 되어있음

 

15, 120 , 144 이렇게 내가 원하는 프레임을 입력 가능함

 

+

 

 

 

+

 

 

오른쪽 위 아이콘, volume 아이콘 클릭해서 오브젝트 아이콘을 끌 수 있음

거슬리면 끔

 

+

 

quad plane
버텍스 4개 밖에 안되는 단순한 평면 사각형 버텍스 여러개인 평면 사각형
간단 2d 작업 여러 작업
영상 보여주기 vfx, 풀, 영상 등등

 

 

+

 

 

영상 video 를 게임에 응용하기

 

 

애펙에서 미리 만들어놓은 alpha 값있는 투명 loop video 를 주로 사용함

 

 

모델링 위에 텍스쳐 매핑 배경으로 쓰기 스킬 이펙트

 

 

 

 

 

 billboard 빌보드

항상 카메라를 바라보게 하는 기법

 

항시 카메라를 보고있는 hp 바 ui

 

 

 

billboard tree / bush 기법  

 

 

 

+

 

 

Asset 에셋  
게임을 이루는 각종 요소들

 

+

 

https://assetstore.unity.com/ko-KR

 

Unity 에셋 스토어

게임 제작을 위한 베스트셀러 에셋을 만나 보세요. 다양한 2D/3D 모델, SDK, 템플릿, 툴로 구성된 유니티의 카탈로그를 활용하여 게임 개발의 속도를 높일 수 있습니다.

assetstore.unity.com

 

유니티 공식 어셋 스토어

 

 

 

3d 모델, 효과음, 배경음, 스킬 이펙트, RPG 장르 프리셋, 인벤토리 ui,

ai 행동, 폴더 아이콘, 인게임 붓칠 시스템 등등 여러가지가 있다

 

 

 

 

https://assetstore.unity.com/ko-KR?category=essentials%2Ftutorial-projects&free=true&orderBy=1

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

 

학습용 에셋도 있다

 

프리셋이 짜여져 있는 거임

 

+

 

 

 

내가 원하는 템플릿 에셋 다운받은 후

스크립트를 뜯어보며 공부도 가능

 

+

 

오브젝트 풀링 pool

 


총알 처럼 자잘자잘한 오브젝트들을  
instantiate 오브젝트 생성 후 destroy 오브젝트 파괴
이렇게 하면 성능 저하 문제점이 발생함

초기생성작업 부터 시작해서 쓰레기 파일을 모아 삭제까지 하고...
뭔가 안맞음

 


그래서 쓰는게 풀링임

빌려와서 삭제할 땐 되돌려줌
활성화 / 비활성화 개념임



오브젝트 풀링 개념이 더욱 fps 가 높게 나와서 좋음



+

 

오브젝트 풀링 쓰는 경우

 

3D 오브젝트를 파티클 처럼 여러개 쓸 때

점프 먼지 이펙트,

총알 이펙트,

관중 오브젝트

 

 

 

오브젝트 풀링이 아니라 Destroy 를 써야하는 경우

 

보스 등장 연출

일회성 파티클 연출

이벤트 완료

 

딱 한번만 나오고 사라지는 오브젝트에 적합하다

 

 

+

 

 

장애물을 비껴가서 목적지에 가는 것을

 

path finding 이라고 함

 

 

마우스 왼 클릭으로 플레이어 이동,

적 ai 의 이동 

등에 쓰임

 

 

 

반응형
Posted by 이름이 익명
:

 

 

 


스크립트에서 

자주 쓰이는 컴포넌트는 Awake에서 미리 받아놓기

입력을 제외한 Update는 코루틴으로 제어

많은 양이 필요한 오브젝트는 풀링으로 관리


사용안하는 Start, Update
유니티 이벤트는 사용안하면 코드에서 빼주기 

스크립트를 생성하면 Start, Update가 자동으로 생성해주는데 
거기에 코드가 비어있어도 유니티에서는 두 이벤트를 호출함 


유니티에선 스크립트는 PlayerSetting Scripts에서 실행순서를 바꿀수있음

GameManage같은 게임옵션이나 
게임 설정에 포함된 스크립트를 최우선순위로 실행하게 만들 수 있음


이건 개인취향이지만 나는 싱글톤을 매우 좋게 사용함 

유니티는 컴포넌트로 스크립트를 붙이기때문에 
Manage스크립트를 가져오려면 오브젝트를 찾고 
컴포넌트를 등록 해줘야하지만 

싱글톤을 사용하면 Manager스크립트가 두개 생성되는걸 막고 

instance로 호출이 가능함 

물론 유니티용으로 모노싱글톤 스크립트도있음



물리연산은 FixedUpdate에서 처리

Debug.Log는 빌드전에 전부 지워주기 
프로파일러만 봐도 Debug 사용시 리스크가 큼


Destroy 함수는 왠만하면 사용하지 말기 


GC에 올라가서 비활성화 해놓고 재사용 할 수 있으면 사용하기


게임종료검사, 조건검사는 LateUpdate로 사용하기


움직이지않는 오브젝트는 static으로 변경


라이트 매핑 이용하여 런타임 리스크 줄이기



PlayerSetting Physic에서 
충돌이 필요없는 레이어는 체크 해제하기


배경화면을 제외한 Sprite는 아틀라스로 묶어 사용하고
캐싱하여 사용하기


메쉬 콜라이더 수 줄이기


스크립트 내부에서, 동적으로 Find 기능으로 오브젝트 찾지말기


foreach보다 for문 위주로 사용


switch case문 적절히 사용하기


string비교는 CompareTo


string 붙이기는 StringBulider


로딩화면 구현 후 
로딩화면에서 GC호출해주기


 

 

 

 

 

 

 

https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=37808

 

소소하게 써보는 나만의 유니티 최적화,팁 - 인디 게임 개발 마이너 갤러리

자주쓰이는 컴포넌트는 Awake에서 미리 받아놓기 입력을 제외한 Update는 코루틴으로 제어 많은 양이 필요한 오브젝트는 풀링으로 관리 사용안하는 Start, Update등 유니티 이벤트는 사용안하면 코드

gall.dcinside.com

 

 

반응형
Posted by 이름이 익명
:

 

 

 

    public float jumpPower;

 

라고 스크립트 상단에 쓰면 

인스펙터 창에서 언제든지 값을 조정 가능해짐

 

 

using UnityEngine;

public class PlayerBall : MonoBehaviour
{

    public float jumpPower;
    bool isJump;
    Rigidbody rigid;

    void Awake()
    {
        isJump = false;
        rigid = GetComponent<Rigidbody>();
    }

    private void Update()
    {
        if(Input.GetButtonDown("Jump") 
          && !isJump)
        {
            rigid.AddForce(
            new Vector3(0, jumpPower, 0), 
            ForceMode.Impulse);
            isJump = true;
        }

    }

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.name == "Floor")
            isJump = false;
    }
}

 

플레이어의 2단 점프 방지하기

무한 점프 방지하기

 

한번 점프시 점프를 불가능하게 만듦

(isJump 가 트루)

 

바닥(Ground) 오브젝트에 닿으면

점프가 다시 가능하게 만듦 (isJump 가 팔스)

 

+

 

바닥은 name 이 아니라 tag 로 하고 싶으면

        if (collision.gameObject.tag == "Floor")

 

 

+

 

회전축은 크게 두가지임

self 자기 자신 중심 기준

world. 전체 월드 기준 

 

 

self world

 

self 로 회전시켰는데 , 회전하는 티가 안 나서 world 로 바꿈

 

 

+

 

 

name == Item 설정했는데

    if (other.name == "Item")

 

위 스샷처럼 복붙하면 이름이 달라져버려서 스크립트 작동 안되는 경우가 있음

 

그래서 name 보다는 tag 를 쓰는 거임

 

태그 하나 만든 후

 

오브젝트 인스펙터 창에서 태그 지정한 후

 

스크립트 창에서

 

    if (other.tag == "Item")

이렇게 변경 한다

 

+

 

 

Copilot ai 챗봇에게 물어봐서 만든

추락 방지 오브젝트 만드는 법

 

저 아래에 넙적한 회색 네모에 닿으면

플레이어의 위치를 0 0 0 으로 이동시켜줌

 

using UnityEngine;

public class TeleportPlayer : MonoBehaviour

{
    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            // 플레이어 위치를 (0, 0, 0)으로 순간이동
            other.transform.position 
            = new Vector3(0, 0, 0);
            Debug.Log("플레이어가 순간이동되었습니다!");
        }
    }
}

 

 

+

 

궁금증 하나 더 생김

나중에 rpg 게임 만들다보면  Tag 가 아주 많아질텐데 이건 문제가 안될까?

에 대한 챗봇 답변

 

많은 태그는 분류가 힘들어지는 문제, 퍼포먼스 저하가 있다

 

태그가 아니라 커스텀 데이터 스크립트를 이용해라

예시 : 

public enum MonsterSize { Small, Medium, Large }

public class Monster : MonoBehaviour
{
    public MonsterSize size;
}

 

 

+

 

주로 쓰는 태그는 다음과 같음

 


캐릭터 유형: Player, Enemy, Ally

상호작용 가능한 오브젝트: Item, Pickup, Door

게임 오브젝트 타입: Projectile, Obstacle

 

 

+

 

 

GameManager 

= 형태가 없고 전반적인 걸 관리하는 것

 

+

 

스크립트 Find 함수는 CPU 소모가 크니까 쓸 때 주의 할 것

 

+

 

using UnityEngine;
using UnityEngine.SceneManagement;

public class PlayerBall : MonoBehaviour
{

    AudioSource audio;
    public float jumpPower;
    public int itemCount;
    public GameManagerLogic manager;
    bool isJump;
    Rigidbody rigid;

void OnTriggerEnter(Collider other)
    {

    if (other.tag == "Item")
        {
            itemCount++;
            audio.Play();
            other.gameObject.SetActive(false);
            
        }


    else if (other.tag == "finish")
        {
            if (itemCount == manager.totalItemCount)
            {
            // Game Clear
            }
            else {
                 //Restart
                SceneManager.LoadScene("SampleScene");
                 }

 

아이템 카운트를 다 못 모으고 결승전 피니쉬 라인에 다다른다면

 

씬을 다시 불러와서 초기화 한다는 뜻

 

+

 

    else if (other.tag == "finish")
        {
            if (itemCount >= manager.totalItemCount)
            {
                // to next stage
                SceneManager.LoadScene("Example_2");

            }
            else {
                 //Restart scene
                
                SceneManager.LoadScene("SampleScene");
                 }

            
        }

요렇게 하면

아이템 일정 개수 이상 모으면 다음 스테이지로

못 모으면 처음부터 초기화 해서 다시 라는 뜻

 

+

 

SceneManager.LoadScene

은 잘만 사용하면

나중에 시간 마법. 처음으로 되돌리기 마법을 구현할 수 있을듯

 

 

+

 

 

쓰는 씬은 꼭

file - build profiles 에 

add open scenes 를 넣어주자

 

안그럼 에러남

 

+

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class GameManagerLogic : MonoBehaviour
{
    public int totalItemCount;
    public int stage;
    public Text stageCountText;
    public Text playerCountText;

    void Awake()
    {
        stageCountText.text = "/ " + totalItemCount;

    }

    public void GetItem(int count)
    {
        playerCountText.text = count.ToString();
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Player")
            SceneManager.LoadScene(stage);
    }

}

 

↑ 게임 메니저 로직 스크립트

 

 

using UnityEngine;
using UnityEngine.SceneManagement;

public class PlayerBall : MonoBehaviour
{

    AudioSource audio;
    public float jumpPower;
    public int itemCount;
    public GameManagerLogic manager;
    bool isJump;
    Rigidbody rigid;

    void Awake()
    {
        isJump = false;
        rigid = GetComponent<Rigidbody>();
        audio = GetComponent<AudioSource>();
    }

    private void Update()
    {
        if(Input.GetButtonDown("Jump") 
          && !isJump)
        {
            rigid.AddForce(
            new Vector3(0, jumpPower, 0), 
            ForceMode.Impulse);
            isJump = true;
        }

    }

    void FixedUpdate()
    {
        float h = Input.GetAxisRaw("Horizontal");
        float v = Input.GetAxisRaw("Vertical");

        rigid.AddForce(
        new Vector3(h, 0, v), // y axis is for jump
        ForceMode.Impulse);
    }


   void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "Floor")
            isJump = false;
    }

    void OnTriggerEnter(Collider other)
    {

    if (other.tag == "Item")
        {
            itemCount++;
            audio.Play();
            other.gameObject.SetActive(false);
            manager.GetItem(itemCount);           

        }


    else if (other.tag == "finish")
        {
            if (itemCount >= manager.totalItemCount)
            {
                // to next stage
                SceneManager.LoadScene("Example_2");

            }
            else {
                 //Restart scene
                
                SceneManager.LoadScene("SampleScene");
                 }

            
        }
    }


}

 

  플레이어 스크립트

 

 

길어서 복잡하겠지만

 

 


플레이어의


    void OnTriggerEnter(Collider other)
    {

    if (other.tag == "Item")
        {
            itemCount++;
            audio.Play();
            other.gameObject.SetActive(false);
            manager.GetItem(itemCount);           

        }


게임메니저 로직의


    public Text stageCountText;
    public Text playerCountText;

    void Awake()
    {
        stageCountText.text = "/ " + totalItemCount;

    }

    public void GetItem(int count)
    {
        playerCountText.text = count.ToString();
    }

 

 

위 두개가 연관 있다~

 

정도만 알아두자

 

 

 

ui 상에선 저렇게 표기

 

 

/ 0 로 표기 0 으로 표기
Player Item Text Stage Item Text

 

 

+

 

 

컴포넌트 창에서 텍스트 드래그 하려면

TMP_Text 로 되어야 함

 

TMP_Text  가 아니라 Text 로 하면 안댐

 

 

+

 

 

 

씬 0 에서 만든 ui canvas 는

그냥 단순 복붙해서

씬1, 씬2 ... 에서 사용함

 

 

 

+

 

 

 

다 만들면 이런 게임이 됨 :

 

아이템 다 먹으면

다음 스테이지로 갈 수 있음

스테이지 두번째부턴 미구현

 

 

 

 

반응형
Posted by 이름이 익명
: