보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

 

roll a ball 이라는 튜토리얼을 함. urp 파이프라인 기준,

 

 

 

첫 씬을 만든 후

save as - Scene 폴더 만든 후 Minigame 이라고 이름 지어 저장 하면

이 지금 씬의 이름이 Minigame 이라고 지어짐

 

맨첨엔 암것도 없으니

하이어라키 메뉴 - 우클릭 - 3d object - 원하는 primitives 쉐잎을 생성

난 박스를 선택해서 바닥에 깔앗음

 

 

primitive 중 sphere 만든후 Player 라고 명명

이 강의에선 공이 주인공임

 

 

 

마테리알도 만들어보자. 드래그 해서 적용함.

surface inputs 의 base map 에서 색조절

 

player 에게 rigidbody 콤포넌트 추가

 

window - package manager - input system 깔기

 

키보드 입력 연관된 거라함

 

file- build profiles - x64 체크

 

 

https://learn.microsoft.com/ko-kr/visualstudio/gamedev/unity/get-started/getting-started-with-visual-studio-tools-for-unity?pivots=windows

visual script , unity 호환 설치

 

player 공에게 컴포넌트 player input 추

 

scripts 폴더추

 

player 에 콤포넌트 아래 new script 

PlayerController 

 

 

새 스크립트 만들었음 해당 폴더에 정리

 

+

 

코드에서

Void Start
처음에 딱 한번만 실행
초기화 작업때 사용

Void Update()
매 프레임(=틱, 1/60초) 마다 호출함
Update()는 불규칙하기 때문에 물리엔진에 부적합함

Void FixedUpdate()
고정된 시간 간격마다 호출.

물리연산(리지드바디)을 안정적이게 만듦

 

Void  LateUpdate()

Update()가 호출된 후 마지막에 호출됨
주로 플레이어 따라다니는 카메라는 LateUpdate() 를 사용함




+


코드에서 
using UnityEngine.InputSystem; 이라는 건 


난 앞으로 UnityEngine.InputSystem 
에서 있는 명령어들을 사용하겠다 라는 뜻이다

 

+

 

 

microsoft visual script 가 유니티랑 제대로 연결되었다면

코드 조금만 써도 자동완성기능 이 생김

→ 오른 화살표 키 를 누르면 자동으로 코드 완성해줌

 

 

+


괄호 영어로
소괄호 ( round bvracket
중괄호 { curly bracket
대괄호 [ square bracket

 

 

오타가 안 나게 항상 주의하자

오타가 없나 항상 체크하자

 

 

 

 

값을 직접 조절해야하는 것이면 public 으로 바깥공개

개발자가 굳이 값을 보지 않아도 되면 private

 

 

 

가속도 붙어서 움직이는(물리 법칙이 자연스러운) 공의 이동

을 구현한 코드는 아래와 같음

 

Z 축 점프는 뺀 거임

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    public float speed = 3; //기본속도는 3으로 설정

    private Rigidbody rb;

    private float movementX;
    private float movementY;

    // Start is called once before the first execution
    // of Update after the MonoBehaviour is created
    void Start()
    {
        rb =  GetComponent<Rigidbody>();
    }
    void OnMove(InputValue movementValue)
    {
        // function Body
        Vector2 movementVector = movementValue.Get<Vector2>();

        movementX = movementVector.x;
        movementY = movementVector.y;

    }
    void FixedUpdate()
    {
        Vector3 movement = new Vector3(movementX, 0.0f, movementY);

        rb.AddForce(movement * speed);
    }
}

 

 

 

 

rotation x 45 로 하고 position y 10 정도 올린게 일반적인 카메라 뷰

 

 

플레이어 하이어라키 아래쪽으로 메인 카메라를 종속 시키면

아래와 같이

 

플레이어가 회전하면 카메라도 따라서 회전하는 문제가 있음

 

 

그래서 그냥 main camera 와 player 를 서로 child 안 시키기로 하고,

스크립트로 연결시키게 하기로 함

 

main camera 에 새 스크립트 CameraController 생성

스크립트를 스크립트 폴더로 옮겨 정리

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraController : MonoBehaviour
{
    public GameObject player;

    private Vector3 offset;

    // Start는 첫 프레임 업데이트 이전에 호출됩니다.
    void Start()
    {
        offset = transform.position - player.transform.position;
    }

    // Update는 프레임마다 한 번씩 호출됩니다.
    void LateUpdate()
    {
        transform.position = player.transform.position + offset;
    }
}

CameraController 스크립트를 위와 같이 씀

 

CameraController 의 Player 칸에 플레이어 드래그해서 지정

 

이러면 회전값은 반영 안되지만, 위치값은 플레이어를 따라다니는 카메라가 되버림

 

+

 

 

 

벽을 cube 로 만들고

empty 오브젝트 안에 west east north south 4개를 일일히 만듦. 일일히 손수 배치.

그 후 box collider , is trigger 체크안함 이 되어있나 확임

 

 

노란 큐브 생성 후 이름을 PickUp 생성

콜렉터블 오브젝트 만들거임

 

 

PickUp에게 Rotator 라는 새 스크립트를 만들고 적용시킴

 

 

using UnityEngine;
using System.Collections;

public class Rotator : MonoBehaviour
{

    void Update()
    {
        // deltaTime 값을 곱하면 프레임이 아닌 초를 기준으로 회전함
        transform.Rotate(new Vector3(15, 30, 45) * Time.deltaTime);
    }
}


Translate 는 이동시킨다는 뜻
Rotate 는 회전시킨다는 뜻

Time.deltaTime은 부드러운 움직임을 위한 것

+

 

Prefabs 폴더를 만든후

노란 네모 PickUp을 드래그 해서 넣기

 

한번 프리팹 인스턴스가 되면

하이어라키 리스트 창에서 파란 네모 아이콘이 됨

 

인스턴스 옆 > 화살표를 클릭하면 해당 프리팹 수정 가능해짐

 

PickUp Parent 엠티오브젝트 생성후 transform reset 

 

페어런트를 이렇게 PickUp을 아래에 속하게 하기

 

PlayerController cs 맨 아래에 저 줄을 추가한다

부딪치면, 대상을 사라지게하는 것임

 

prefabs 선택법

왼위 화살표 클릭 또는

아래 프로젝트 창 에서 클릭

 

add tag , + 버튼 클릭해 새 태그 추가

 

프리팹 선택으로 돌아가서.. tag 란에 내가 만든 ' PickUp ' 이라는 태그가 추가된걸 확인할 수 있음

 

 

아까 설정했던
private void OntriggerEnter Collider oher (부딪치는 물체를 사라지게 함)
에 PickUp tag 만 적용되게 하려면...

 

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("PickUp"))
        { 
            other.gameObject.SetActive(false);
        }
    }

PalyerController cs 에서 위 코드를 설정하면

  다른 오브젝트와 충돌이 발생시,

  그 오브젝트의 태그가 PickUp 일시,

  그 오브젝트를 비활성회 시키겠다

라는 뜻임

 

프리팹의 콜라이더 인스펙터에서 Is Trigger 를 활성화 시키자

 

그러면 노란 박스 프리팹 건드릴때마다 노란 박스 프리팹이 성공적으로 사라짐

 

노란박스 프리팹에 Rigidbody 추가.

Use gravity 끔

is kinematic 킴

 

 

+

 

공 수집 개수 체크하기

굳이 개발자가 일일히 설정하는 숫자가 아니라서 private 로 설정함

원리는 매 게임 시작할 때마다 0으로 시작함
노란박스 하나씩 수집할 때마다 1개씩 증가함

 

count 를 새로 지칭하고, count 가 처음엔 0 으로 시작하고, 충돌시마다 count 개수가 1씩 증가하도록 코드를 짬

 

 

하이어라키 메뉴 - 우클 - ui - text textmeshpro

 

import tmp essentials 클릭 

그리고 x 버튼으로 그 자그만한 tmp 메 끄기

 

 

Text (TMP) 이름을  CountText 로 변경

 

 

 

화면 위 2D 뷰 토글

 

오른쪽 Text Input 안에 Count Text 라고 쓰기

 

 

저 빨간 네모칸을 누르면

anchor 기준을 변경 가능. 여기선 왼위를 기준으로 삼겠다

 

 

 

Player Controller sc 인스펙터

Count Text 에 Count Text 를 드래그

 

 

 

text mesh pro 하나 더 생성 후 이름변경 : WinText

vertex color 는 블랙으로 설정

Text input 칸엔 You Win! 라고 쓰기

 

 

 

 PlayerController 스크립트 속

wintext를 알리는 유니티 고유 언어 
public GameObject winTextObject; 
라고 지정

wintext는 시작시 꺼짐상태임
void start 란에 winTextObject.SetActive(false); 를 넣음 

void SetCountText 아래에
if 절을 추가함
if (count >= 8) 
{
 winTextObject.SetActive(true);
}
카운트 수가 8개가 되면 승리하도록 설정

(강의에서는 12개지만 난 8개로 설정)

 

 

 

 

win text object 에 win text 드래그

 

텍스트 표시까지 완료하면 아래와 같은 코드가 됨 :

using UnityEngine;

// Unity UI 및 Input System을 사용하는 데 필요한 네임스페이스를 포함합니다.
using UnityEngine.InputSystem;
using TMPro;

public class PlayerController : MonoBehaviour {
	
	// 플레이어 속도 및 텍스트 UI 게임 오브젝트에 대한 public 변수를 만듭니다.
	public float speed;
	public TextMeshProUGUI countText;
	public GameObject winTextObject;

        private float movementX;
        private float movementY;

	private Rigidbody rb;
	private int count;

	// 게임을 시작할 때
	void Start ()
	{
		// 리지드바디 컴포넌트를 private rb 변수에 할당합니다.
		rb = GetComponent<Rigidbody>();

		// count를 0으로 설정합니다. 
		count = 0;

		SetCountText ();

                // Win Text UI의 텍스트 프로퍼티를 빈 문자열로 설정하여 'You Win'(게임 오버 메시지)을 공백으로 만듭니다.
                winTextObject.SetActive(false);
	}

	void FixedUpdate ()
	{
		// Vector3 변수를 만들고 X와 Z를 할당하여 위의 horizontal 및 vertical 플로트 변수를 구현합니다.
		Vector3 movement = new Vector3 (movementX, 0.0f, movementY);

		rb.AddForce (movement * speed);
	}

	void OnTriggerEnter(Collider other) 
	{
		// 교차하는 게임 오브젝트에 'Pick Up' 태그가 할당되어 있는 경우
		if (other.gameObject.CompareTag ("PickUp"))
		{
			other.gameObject.SetActive (false);

			// 점수 변수 'count'에 1을 추가합니다.
			count = count + 1;

			// 'SetCountText()' 함수를 실행합니다(아래 참조).
			SetCountText ();
		}
	}

        void OnMove(InputValue value)
        {
        	Vector2 v = value.Get<Vector2>();

        	movementX = v.x;
        	movementY = v.y;
        }

        void SetCountText()
	{
		countText.text = "Count: " + count.ToString();

		if (count >= 12) 
		{
                    // 'winText'의 텍스트 값을 설정합니다.
                    winTextObject.SetActive(true);
		}
	}
}

 

 

 

 

노란 박스를 하나씩 먹으면 count 수가 하나씩 올라가다가..

8개 이상 이 되면

you win! 출력 됨

 

 

 

이제 게임이 왼성되었으면

녹화도 하고

build 하면 됨 

빌드는 window, mac, ios 등 여러플랫폼으로 출판하는 걸 의미함

 

+

 

코파일럿 ai 응용하기

 

코드 복붙 후 , 원하는 프롬프트 넣으면 코드를 수정해줌

 

 

 

위 스샷처럼

카운트 수를 8 고정이 아니라,

인스펙터 창에서 내맘대로 수정 가능하게 만들 수 있음

 

코드 복붙후,

자연어 입력후,

코파일럿이 싸지른 거 

스크립트 창에 복사 붙여넣기 하면 됨

 

 

문제는,

두리뭉실하게 말하지 말고

콕콕 찝어서 자세히 말을 해야함

그러려면 유니티 코딩관련 지식을 더 많이 알아야 함

 

 

반응형
Posted by 이름이 익명
:

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

 

 

내 위시리스트임. 아래 어셋 개수는 15개 정도 있으며 다 사면 80만원 정도 함.

 

 

rainbow 시리즈, 두트윈, 필, 세이브 ,다이얼로그, 텍스트 애니메이터   ㅡ 이정도는 사도 좋음

 

나머지는 일단 중급자 레벨 되고 나서 생각해봐도 됨

 

 

+

 

https://docs.unity3d.com/Packages/com.unity.muse.common@2.0/changelog/CHANGELOG.html

유니티 ai muse 업뎃 소식

챗봇상담, 2d 이미지 생성, 3d 애니메이팅, 비헤이비어,pbr 텍스쳐 생성 등

구독은 월 30달러, 3만원 꼴

 

 

 


 

 


DOTween pro
easy ease
시작 시점과 종료 시점을 설정. 두 물체간 상호작용 강화.
위치/회전/크기 등 애니메이션을 쉽게 구현하는 기법

드랍템 줍기, 투사체를 따라가는 카메라, 심화된 파티클 연출 등을 구현하기 쉽게 해줌

 

sequence : 물체가 다른 물체를 따라다니는 기능

 

코딩 없이 컴포넨트 하나로 쉽게 구현가능

플레이 테스트 모드 안 켜도 바로 미리보기 가능

 

-> 두트윈, 필 둘다 비슷한 역할을 하니

둘 중 하나만 골라도 된다함

필은 더 쉬움. 두트윈은 더 대중적임




Rainbow Folders 
유니티 에딧창의 폴더를 색상과 아이콘으로 쉽게 구분


Rainbow Hierarchy
하이어라키 레이어 창을 색상과 아이콘으로 쉽게 구분
업데이트 지원 안함

 

 

vHierarchy 2

아이콘 및 하이어라키 창 정리

 

 


FEEL 
ui, 오브젝트, 카메라의 향상된 움직임 을 쉽게 구현

타격감을 만들기 쉽게 해주는 에셋
easy ease 움직임 또잉또잉, 카메라 흔들림, 카메라 멀리 보기 등등  
애니메이션 가속도 커브 넣기

스킬 필살기 만들 때 유용

 

Grabbit

오브젝트 배치를 쉽게 해줌

수작업 없이 물리 기반 물체 쉽게 배치, 물체 정렬 기능, 무게중심 조절,더 정확한 메쉬기반 콜라이더

 

 


Text Animator for Unity
여러 텍스트 애니메이션 프리셋 
데미지 인디케이터 만들 때 유용

 


Master Audio 
버튼 한방으로 관리
audio 플레이시 random pitch 기능

Audio Random Container

무료 내장 에셋 , 이미 있음

랜덤 오디오 재생할 파일 여러개를 하나로 묶을 수도 있고,

피치도 볼륨도 랜덤조절 가능

 

 


Dialogue System for Unity
시각적 ui 기반. 
대화 분기를 보기 쉽게 만들 수 있음
퀵타임 이벤트, 퀘스트 시스템 등


Ultimate Inventory System
아이템 관리, 장착, 상점, 제작, 루팅, 몬스터드랍, 핫바
 2D 및 3D 지원


Easy Save
데이터 저장 및 불러오기

 


PLAYMAKER
코드 없이 게임 만드는 용도
비쥬얼 스크립팅

기존 비쥬얼 스크립팅(볼트, 노드)은 덜 직관적임
플레이메이커는 그보다 더 쉽게 만든 것

 

->
그냥 볼트(내장 비쥬얼 스크립트)만 쓰는 걸 추천하는 사람도 있음

볼트가 아이콘도 있지만 플메는 아이콘이 없음

 

 

 

 


Tactics Toolkit
택틱스 턴알피지 제작 어셋

전투 및 그리드 등등 메카니즘 전반적인 것을 다룸


 

+

 

 


Easy Performant Outline
아웃라인 외곽선을 딸-깍 해서 만드는 거
인게임 타겟 설정시 유용

 

 

 

Volumetric Lights
연기빛 , 태양빔을 제작

 

 

Shapes
변수에 따른 도형을 생성 가능

'공격력이 높을수록 더 큰 파이어볼을 시전'  이러한 스킬 만들 때 유용
각종 인터렉티브 ui 만들 때도 유용

 

 

curved world

휘어진 월드(및 무한 루프 길)을 쉽게 제작

재밌는 맵을 쉽게 딸 깍

 

 

 

Paint Bundle
인게임에도 적용 가능. 마테리알 텍스쳐 응용 어셋임
낙서, 페인트, 피묻힘 효과,문신, 발자국 등 표현

반응형
Posted by 이름이 익명
:

게임잡담 1234

게임 그외 잡담 2024. 10. 28. 04:53 |

 

 

 

게임 모드 , 일반인이 만든 ai 그림 전문 게임 개발자가 만든 공식 게임
   
고객 니즈가 그대로 반영되어 있음 돈 벌려고 그냥 막 만든 경우가 많음
   
컨셉 아트로는 이게 더 나을지도 모름  

 

 

 

+

 

 

서큐버스 에이미를 
착한 인간으로 변하게 설득할 것인가 
VS
나쁜 악마로 살게 할 것인가


두가지 갈림길이 있다
이렇게 플레이어에게 선택권을 준다면
플레이어는 더욱 재미를 느낀다

 

+

 

 

포켓몬 게임의 단점

풀베기 써야 지나갈 수 있는 맵구조
스토리 막힘 현상
못생긴 포켓몬으로 진화를 강요함 난 7+개의 포켓몬을 육성하고 쓰고 싶은데

6의 포켓몬 까지밖에 전투에서 사용가능함
그냥 쎈 기술 난사하면 이기는 배틀구조 전작에 나온 포켓몬이
이번작에 안나옴
똑같은 적, 똑같은 장소에서
오래 싸워야해서 질림
     

 

이걸 가지고 역이용해서

 

이 문제점들을 개선한,

포켓몬 비슷한 정식적 후속작을 만드려고 하는 양키 성님들이 많다

 

 

+

 

버섯인데 물가에 있다?

고래인데 하늘을 난다?

 

이걸 게임상에서 구현하면 그게 판타지 장르가 되는 거임

 

+

 

 

철수 : 퍼리 동물원 겜으로 만들래

영희 : 아냐 로봇 공선전 만들자

민수 : 야겜 미니게임천국 만들자

 

이처럼 사람이 다수 모이면 각자 주장하는게 달라짐

협업하면 게임이 망가지기 쉬움

 

 

그래서 그냥 1인 개발 베이스로 해야함

 

하위 항목들은 남에게 외주 맡기는 스타일이 가장 좋은 선택임

 

 

+

 

 

게임상 수치가 -1 이라는 건
무한히 반복된다는 뜻임

 

+


tweening 두 물체를 상호작용해서 만드는 애니메이션


sequence 하나의 물체가 다른 물체를 따라다니게 하는 기능. 파티클에서 자주 씀

 

+

 

스카이림이나 림월드 같은 게임할 때도 모드 몇백개 까는게 필수이듯이,

 

유니티, 블렌더, 애팩 쓸 때도

유료 어셋 여러개를 구입해서 쓰는 게 필수다

 

 

 

+

 

스토리 짜는 건 보는 사람을 설득 시키는 것이다
캐릭터의 행동에 그럴싸한 이유를 만드는 게 스토리 제작이다


철수가 그냥 갑자기 동료가 됨 : 기분 나쁨

철수가 선술집에 있음.
시급 낮다며 나도 여행자나 할래
데려가줘
응 선택지
다음에서 전투 1번 치른 후
나하고 적성이 맞다고 계속 여행할래
응 선택지
: 그럴싸해서 괜찮음

 

+

 

 

 

 


보통의 던전 크롤러 장르는
어두운 지역을 하나씩 밝혀 나가는게 주요 개념이다


긴장감을 높게 유지시키는게 기본임


로그라이크 비슷함. 
전투하면 회복템 얻거나 성장을 함

 

 

 

이 어두운 곳을 탈출하는 걸 목표로 삼음

Extraction, 탈출이 목표임


탈출하다 사망시 아이템을 잃거나 레벨을 잃어버림
하이 리스크임

성장형 rpg 게임임

어두운 지역을 밝히면 랜덤하게 
보물 또는 새로운 장소 또는 적이 나타남

스토리보단 전투에 집중한 장르

 

+

 

'그냥 플레이어에게 버프 줌'

이러면 밋밋하니까


이걸 심화 시킨게 신 숭배 사상이다

예시 :
불교를 믿으면 회복마법을 배움, 제단에서 방어력 증 버프 받음
천주교 믿으면 공격마법을 배움, 제단에서 공격력 증 버프 받음


+

 



Kaze no Tansakusha  바람의 기사
風の探索者 Grand Slam 의 공식 장르는 던전 크롤러 장르다

 

행동시에만 시간이 흐르는

반 실시간 시스템이다

 

시간(선딜레이)과의 싸움

배고픔(마나수치)과의 싸움

이 있다

 

 

+

 


칭호 시스템은 
업적 시스템과 비슷하다
장비 시스템과 비슷하다
플레이어를 칭찬해주는 방법 중 하나이다

칭호 예시
검의 달인, 무적의, 닌자마스터 등등..

 

+

 

tactics game : 택틱스 오우거 같은 소규모 분대 그리드로 싸우는 rpg  strategy game : 스타크래프트 같은 대규모 유닛 운영하는 rts

 

 

+

 



인간 집중력 최대시간은 7분이라 함
그래서 보스전은 길어야 7분 내로 끝내게 디자인함

적 보스 체력, 적 보스의 빈틈 보이는 간격 
등의 변수를 조절해 7분 이라는 시간을 맞춤

반응형
Posted by 이름이 익명
:

두 개의 오디오 인 풋 을 동시에 들리게 하는법

 

우측 아래 '소리'

 

 

 

재생을 voice meeter input

 

녹음을 voice meeter output

 

 

voice meeter banana 를 다운받아야 함

 

 

설정은 이렇게 함

 

 

녹음 작업시에만 voice meeter 를 키는 거임

 

 

 

반응형
Posted by 이름이 익명
:

https://www.youtube.com/watch?v=NjYOrTFw43A

 

 

 

 

https://www.youtube.com/watch?v=wqj93N3PGnk

 

반응형
Posted by 이름이 익명
:

 

 

구성

하이어라키 레이어 구성

 

 

 

Robot (player)

로봇 플레이어 만 펼쳐보면 아래와 같다

 

+

 

Robot Player 의 콤포넨트 구성

 

Main camera 컴포넨트 구성

 

 

PlayerFollowCamera 라는 오브젝트가 별도로 있더라

 

 

 

자세한건 강의 봐야함

 

+

 

 

키워드 

unity adventure game

 

 

반응형
Posted by 이름이 익명
:

 

 

 

 

 

반응형
Posted by 이름이 익명
: