전체 글 (114)

05
16

⚠️이 글은 API 문서를 보면서 공부한 내용 정리한겁니다.

https://kb.heathen.group/assets/steamworks/api

 

썸네일

 


Heathen API란?

 

Heathen API는 모든 인터페이스를 Unity 친화적인 정적 클래스로 래핑합니다.

때문에 Steam API 전체에 대한 액세스를 제공하며, 원시 API의 기능을 줄이지 않으면서도 사용을 단순화하고

모든 콜백을 UnityEvent로 노출시키고 모든 호출 결과를 Unity 친화적인 Action으로 제공합니다.

 

Heathen API는 모든 인터페이스(네트워킹 인터페이스 제외)를 래핑하고 관련 문서를 복사했습니다. 

이제 IntelliSense(자동완성)을 통해 IDE에서 Valve의 자체 문서를 탐색하고, 

자동 완성 및 제안을 최대한 활용하고, 개체 탐색기를 통해 전체 API를 탐색할 수 있습니다.

 


특징

 

모든 인터페이스는 하위 클래스(.Client 및 .Server)로 구성되어 있습니다. 

클라이언트, 서버 또는 둘 다에서 사용 가능한 항목을 명확하게 만듭니다. 

이것은 현재 빌드 플랫폼에서 사용할 수 없는 코드를 선택적으로 제거하는 조건부 컴파일과 함께 작동합니다.

 

예시:

//Clearly client only
API.StatsAndAchievements.Client.ClearAchievement(achievement);

//Clearly server only
API.StatsAndAchievements.Server.ClearUserAchievement(user, achievement);

 

Valve의 Steam API는 C 및 C++로 작성되었습니다...

우리가 C#에서 사용하는 많은 검증된 패턴과 구조에 정확히 친숙하지 않습니다.

Heathen의 API는 여전히 기존 메서드를 노출하지만 C# 기반 대안도 제공합니다.

 

방식 비교:

 

Steam API는 대리인에 대한 Valve의 답변인 콜백과 콜 결과를 많이 사용합니다. 

Unity에서는 일반적으로 UnityEvents(콜백의 경우) 및 Actions(콜 결과의 경우)를 사용합니다. 

Heathen의 API는 콜백 및 callresult의 모든 경우를 메모리를 관리하는 적절한 Unity 네이티브 등가물로 래핑합니다

 

Steam API 가공 예시:

 

총평

전체적으로 Heathen API는 유니티에서 자주 사용하는 Actions을 활용해서 마개조(?)한 느낌이 든다.

COMMENT
 
05
15

사진에서 보이는 것 처럼 이런 맘에 안드는 태그를 제거 가능하다.

 

https://seogilang.tistory.com/2320

윗분의 글을 통해 사용하게 되었다. 정말 감사합니다

 

사용방법은 다음과 같다.

1. 탭을 두개로 띄워서 쓰고 있는 글의 html 모드로 들어가준다.

2. 맘에 안드는 태그 복사해준뒤

3. 바꿀 태그 입력하는 박스에 붙혀준다.

4. 이제 바꿀 내용을 입력하는 박스에 문제 있는 글 부분만 복붙해준다.

5. 바꾸기 버튼 누르고 나온 글을 복사해가면 된다.

 


 

아래 박스에 바꿀 태그를 입력하세요

아래 박스에 바꿀 글을 입력하세요


 

2023.5.15일 기준 아주 잘 됩니다.

작동이 안된다면 바꿀 태그나 글 입력을 다시 해보세요.

COMMENT
 
05
15

⚠️이 글은 공부한 내용을 정리한 글입니다.

 

썸네일

 

 


구현 개요

 

게임 스탯(통계) 및 업적 정의 도전 과제는 플랫폼마다 다르다.

그래도 공통점이 Steamworks 파트너 사이트의 앱 관리 페이지에서 설정된다는 것이다.

 

스팀웍스로 게임에서 저장할 수 있는 데이터는 세 가지 유형이 있다.

  • INT - A 32-bit (signed) integer (e.g. number of games played)
  • FLOAT - A 32-bit floating point value (e.g. number of miles driven)
  • AVGRATE - A moving average. See: The AVGRATE stat type

int, float, avgrate 이렇게 세가지가 있다.

 

avgrate는 average가 아니다. Average Rate의 줄임말이다.

 

┏AVGRATE가 뭐임?

더보기

AVGRATE라는 것이 눈에 띄는데 쉽게 설명하면 Steam에서 자동으로 평균을 내는 스탯이다.

 

예시로 "시급"같은 평균 스탯을 만든다고 생각해보자.

 

 시급을 구하기 위해서 다음과 같은 접근 방식을 생각해볼 수 있다.

INT로 선언된 "TotalMoney" 및 FLOAT "TotalPlayTimeHours"의 두 가지 스탯을 가지고

시간별로 돈를 나누어 시간당 버는 돈을 얻는 것이다.

 

이렇게 구하면 단점은 플레이어가 너무 많은 플레이 시간이 쌓이면 계산한 평균이 늦게 변경된다는 것이다.

그러니깐 사용자가 게임을 많이 할 수록 평균은 덜 반응한다.

사용자가 게임을 100시간 동안 플레이했다면 계산된 평균은 그보다 약 50시간 "지연"된다.

 

그러면  20시간의 게임 플레이만 값에 영향을 미치는 "시간당 급여",

즉 "시급"을 만들기 위해서 AVGRATE 스탯을 설정해 보자.

 

1. "AvgMoneyPerHour"라는 AVGRATE 통계와 20.0의 Window 속성을 생성한다.(단위는 시간, hour)

2. 게임 중 적절한 지점에 ISteamUserStats::UpdateAvgRateStat를 호출한다.

이 때 매개변수는 아래와 같이 들어가면 된다.

pchName - "AvgMoneyPerHour"

flCountThisSession - UpdateAvgRateStat를 마지막으로 호출한 이후 플레이어가 획득한 돈

dSessionLength - UpdateAvgRateStat에 대한 마지막 호출 이후의 게임 시간,

단위는 통계의 Window 속성에 있는 단위와 같아야 하므로 "시간(hour)"으로 해둔다.

 

참고 : 평균은 "시간당"이므로 관련된 모든 매개변수의 시간 단위는 "시간(hour)"으로 통일 해준다.

스탯 자체의 Window 속성과 아래 UpdateAvgRateStat에 전달된 "dSessionLength" 매개변수도 통일해야함.

 

예를 들어 플레이어가 0.225시간(13.5분) 동안 77원을 얻었다면

SteamUserStats()->UpdateAvgRateStat( "AvgMoneyPerHour", 77, 0.225 )로 해주면 된다.

 

위의 예에서 Steam은 현재 라운드에서 얻은 시간당 평균 77 ÷ 0.225해서 얻은 342.2를 이전 값과 더한다.

결과적으로 플레이어의 지금까지 20시간 플레이타임에 대한 총 평균을 반영한다.

만약 현재 사용자의 스탯(통계)이 처음 업데이트된 경우 현재 값은 342.2이 되는 셈.

 

이 예에서는 시간 단위로 "시간"을 사용하지만 원하는 시간 단위를 사용할 수 있습니다. 

Window 속성뿐만 아니라 "dSessionLength"의 기준으로 단위 통일해야하는 것만 명심하면 됨.

 

조금 있다가 Steamworks 파트너 웹사이트에서 스탯을 만들어 볼건데 거기서 이런것들을 할 수 있다. ↓

1. 초기 통계 및 업적 정의

2. 중간에 추가할 통계 및 업적 추가

3. 업적 이름, 설명 및 아이콘 업데이트

4. 통계 매개변수 및 제약 조건 업데이트(최대/최소 값, 이동 평균 창 크기 등)

 


Steamworks 파트너 웹사이트에서 관리

 

개요를 살펴봤으니 이제 관리 사이트를 알아보자

 

클릭해서 확대하세요

 

사이트 UI가 너무 어지러워서 하나하나 천천히 살펴보면서 정리해보았다.

 


01 스탯(통계) 부분

 

사이트에 가보면 알 수 있는데 스탯(통계)에는 다음과 같은 속성이 있다.

왼쪽부터 쭉 순서대로 보면

ID - 각 스탯(통계)에 대해 자동으로 생성된 숫자 ID
Type - 이 Stat의 유형, INT, FLOAT 또는 AVGRATE
API Name - API로 이 스탯에 접근할 때 쓰는 문자열이름 (네이밍은 자바 상수 느낌? ex) STATS_MONEY)
Set By - 스탯을 수정할 수 있는 사람을 설정한다. 기본값은 클라이언트다.

더 자세히는 ->  Game Server Stats.
Increment Only - 체크 설정하면 이 스탯(통계)은 시간이 지남에 따라 값이 증가만 되는지 정해짐
Max Change - 값 설정하면 스탯 값이 하나의 SetStat 호출에서 다음 호출로 변경되는 양의 제한을 설정함.
Min Value - 값이 설정된 경우 이 스탯(통계)이 취할 수 있는 최소 숫자 value가 정해짐  

기본적으로 최솟값은 기본 숫자 유형(INT_MIN 또는 -FLT_MAX)의 최솟값이다.
Max Value - 값이 설정된 경우 이 스탯(통계)이 취할 수 있는 최대 숫자 value가 정해짐

기본적으로 최댓값은 기본 숫자 유형(INT_MAX 또는 FLT_MAX)의 최댓값이다.
Default Value - 값이 설정된 경우 이 통계가 새 사용자에 대해 초기에 설정되는 기본값이다. 

설정하지 않으면 기본값은 0이다.
Aggregated - 체크 설정하면 Steam이 이 스탯에 대한 전체 합계를 유지한다.

더 자세히는 ->  Global Stats

Display Name - 앱에 표시될 때 이 통계의 이름 설정

 

⚠️만약에 위에서 Type을 AVGRATE로 설정하면 약간의 차이가 있다.

Window - 데이터를 평균화하는 데 사용되는 "sliding window"의 크기다.

그리고 당연히 Increment Only, Aggregated  옵션도 체크가 안된다.

 


02 업적(도전 과제) 부분

 

업적 탭에는 다음과 같은 속성이 있다.

이미지는 256 x 256으로 만들어서 넣어봄

ID - 각 업적에 대해 자동으로 생성된 숫자 ID입니다.
API Name - API로 이 스탯에 접근할 때 쓰는 문자열이름. (네이밍은 자바 상수 느낌? ex) ACHIEVE_1)
Progress Stat - 이 업적에 대한 커뮤니티의 진행률 표시줄로 사용되는 스탯(통계)을 지정한다.

스탯(통계)이 잠금 해제 값에 도달하면 업적도 자동으로 잠금 해제된다.
Display Name - 업적의 이름은 클라이언트 알림 팝업과 커뮤니티에 표시된다. 현지화 가능하다.
Description - 커뮤니티에 표시할 때 이 업적에 대한 설명 부분이다. 역시나 현지화 가능하다.
Set By - 업적을 잠금 해제할 수 있는 사람을 설정한다. 기본값은 클라이언트다.

더 자세히는 ->  Game Server Stats.
Hidden? - true인 경우 "숨겨진" 업적은 달성할 때까지 사용자의 커뮤니티 페이지에 표시되지 않는다.
Achieved Icon - 달성했을 때 표시되는 아이콘
Unachieved Icon - 아직 달성되지 않았을 때 표시되는 아이콘

 

업적 아이콘은 256x256픽셀 JPG 이미지가 제일 잘 나온다고 한다.

64x64만큼 작아도 되지만 더 큰 크기를 사용하는 것이 좋다.

획득한 아이콘은 다채로운 색상을 권장하고 달성되지 않은 아이콘은 회색조여야 한다.

또한 기본적으로 처음에 100개의 업적으로 제한된다.

 

 

 

COMMENT
 
05
13

⚠️공부한 내용을 정리한 글입니다.


조형은 다양한 원재료를 통해서 어떠한 구체적인 시각적 이미지를 만들어내는 과정입니다. 

조형조형 요소 + 조형 원리로 만들어집니다.

 


1. 조형 요소

 

1) 점 

가장 기본이 되는 조형 요소, 점의 연속적인 구성은 입체감, 방향감, 동세를 느낄 수 있게 해줍니다.

2) 선 

점이 모여서 이루어지는 요소,  사물의 윤곽을 나타내고, 공간을 구분하며 때로는 덩어리를 암시하기도 합니다.
반복, 대칭, 균형, 조화 등의 조형 원리는 선에 의해서 형성됩니다.

3) 면

연속적인 선에 의해 표현되는 것, 면은 면적을 가진 2차원의 평면으로, 사물의 일반적인 테두리를 이룹니다.
면에 의하여 형(형태)이 표현되며, 면이 입체화되면 덩어리(양감, 부피감, mass)가 나타납니다.

4) 형

2차원에서 나타나는 모양을 형(Shape), 3차원에서는 형태(Form)라고 말합니다.(구분없이 사용되기도 합니다)
평면의 형은 선의 변화에 따라서 형성되고, 입체의 형은 면의 이동에 의해서 만들어집니다.
형태는 사실적인 형태, 기능에 따르는 형태, 기하학적인 형태, 기호학적인 형태 등이 있습니다.

5) 명암

입체물의 경우, 광선에 의해서 밝은 부분과 어두운 부분이 나눠집니다.
이렇게 빛에 의하여 생기는 밝음과 어두움을 명암이라 합니다.

6) 색

색이란 빛에 의해서 지각되는 요소입니다.
색상, 명도, 채도의 3가지 속성이 있습니다. 삼원색, 보색, 무채색 등 다양한 종류가 있습니다.
색채는 배색이나 대비 등과 같은 변주에 따라서 표현의 엄격한 질서를 부여하기도, 전달의 매체가 되기도 합니다.

7) 질감

서로 다른 재료가 가지는 표면의 거칠고 부드러운 정도(촉각)를 질감이라 합니다. 
이러한 촉감은 시각과 연계되어 보는 이에게 실재감을 느끼도록 합니다. 
2차원의 평면에서는 시각적으로, 

3차원의 입체에서는 실제적인 재료를 사용하여 촉감적으로 질감의 차이를 구분할 수 있습니다.

8) 공간

묘사되지 않은 부분과 물체가 놓이지 않은 여백을 의미합니다. 
실제 공간, 허상 공간, 조형 공간, 물리 공간으로 나뉩니다.

조형 원리는 시각적 예술이나 디자인의 문법입니다.
조형 원리는 조형 요소들을 사용해 작품을 만들기 위한 구성 원리입니다.

 


2. 조형 원리 

 

1) 리듬

조형 요소의 규칙적인 변화를 통해 리듬감이 느껴지게 한다.


2) 비례

조형 요소간의 비율 차이를 통해 디자인 의도를 전달한다.


3) 균형(대칭/비대칭)

조형 요소의 균형(대칭/비대칭)으로 안정감/역동감 등을 전달한다.


4) 대비

조형 요소간의 차이를 활용해 컴포넌트를 강조한다.


5) 강조

조형 요소를 강조하여 컴포넌트를 강조한다.


6) 점이

조형 요소의 점층적인 변화(증가, 감소 등)으로 디자인 의도를 전달한다.


7) 반복

조형 요소의 반복으로 디자인 의도를 전달한다.


8) 통일

조형 요소를 통일시켜 디자인 의도를 전달한다.


9) 변화

조형 요소의 변화를 통해 디자인 의도를 전달한다.

 

디자인 과정에서는 하나 이상의 조형 원리가 적용될 수 있습니다.
이렇게 다양한 조형 원리의 적용은 디자인을 다층적이고 입체적으로 보여줄 수 있습니다.

https://foofriends.tistory.com/58?category=986506

 

[디자인 기초] 조형요소와 조형원리에 대한 글 (1)

(1) 조형의 기본 - 조형요소와 조형원리 조형(造形)은 사전적으로 다음과 같이 정의됩니다. 조형(造形) 여러 가지 재료를 이용하여 구체적인 형태나 형상을 만듦. 이러한 조형은 다양한 원재료를

foofriends.tistory.com

https://foofriends.tistory.com/59

 

[디자인 기초] 조형 요소와 조형 원리에 대한 글 (2)

(2) 조형 요소의 예시 - 점, 선, 면, 형(형태) 조형 요소는 점, 선, 면, 형, 명암, 색, 질감, 공간의 8가지로 분류됩니다. 조형 요소가 실제 디자인 사례에 적용된 예시와 함께 이야기 해보겠습니다. 1.

foofriends.tistory.com

https://foofriends.tistory.com/66

 

[디자인 기초] 조형 요소와 조형 원리에 대한 글 (3)

(3) 조형 요소의 예시 - 명암, 색, 질감, 공간 조형 요소는 점, 선, 면, 형, 명암, 색, 질감, 공간의 8가지로 분류됩니다. 저번 글에서는 점, 선, 면, 형의 조형 요소는 무엇이고 어떤 예시가 있는지 알

foofriends.tistory.com

https://foofriends.tistory.com/68

 

[디자인 기초] 조형 원리는 무엇일까요?

조형 원리 시각적 조형 요소들의 상호 관계를 위한 원칙, 문법, 규칙 조형 원리란 디자인 과정에서 시각적인 조형 요소간의 관계를 형성하는 다양한 원칙들을 말합니다. 8가지의 조형 요소는 디

foofriends.tistory.com

 

'디자인 공부 > 디자인 이론' 카테고리의 다른 글

1 디자인은 뭘까?  (0) 2023.05.13
COMMENT