Vivox SDK Test

유니티가 Vivox 를 인수했다.

Vivox는 블리자드의 오버워치 등의 유명 게임에서 사용하는 음성채팅 모듈을 제공하는 업체다.

Vivox 서비스 등록

개발자 사이트(https://developer.vivox.com/) 에서 계정을 등록하고 사용을 허가 받으면 SDK를 테스트할 수 있다.

Screenshot_022420_111500_AM.jpg

서비스 포탈에 접근하게 되면, 앱을 생성할 수 있다. 생성할 때는 사용할 대상 플랫폼을 지정할 수 있다. 최신 SDK를 다운로드 할 수 있는데, Unity 버전은 모두 같은 내용의 파일을 다운로드한다.  이 파일은 유니티 내 Asset Store 의 Vivox SDK 와 같은 파일이다.

 

유니티에서

Vivox 서비스가 준비가 되면, 유니티에서 관련 Asset을 설치할 수 있다.  Asset Store 창에서 Vivox를 검색해서 Vivox Voice And Text Chat 항목을 선택해서 Import 한다.

Screenshot_022420_112314_AM.jpg

Import 가 완료가 되면, Vivox 폴더에 관련 파일들을 확인할 수 있다.  Samples 폴더에 TanksUnityGameSample 은 Vivox 를 테스트하는 탱크 게임 샘플이다.  관련 씬을 추가해서 빌드 혹은 Editor 에서 테스트 할 수 있다.

테스트를 위해서는 앞서 Vivox Service 가입시 만들어진 앱의 API 종단점 값, 도메인, 발급자자, 시크릿 키 값을 등록해야한다.

주요 기능을 발췌해 보면

Import 해야할 주요 항목은 아래와 같다.

using VivoxUnity;
using System;
using System.ComponentModel;

LoginSession 등의 Callback 부분에 의해서 System.ComponentModel 의 INotifyPropertyChanged 인터페이스를 사용한다.

샘플 코드중에 안드로이드 플랫폼쪽 관련 코드가 추가되어 있다

#if UNITY_ANDROID && !UNITY_EDITOR
// Initialize the VivoxNative module
AndroidJavaClass unityPlayer = new AndroidJavaClass(“com.unity3d.player.UnityPlayer”);
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>(“currentActivity”);
AndroidJavaObject appContext = activity.Call<AndroidJavaObject>(“getApplicationContext”);
AndroidJavaClass pluginClass = new AndroidJavaClass(“com.vivox.vivoxnative.VivoxNative”);
pluginClass.CallStatic(“init”, appContext);
#endif

일단 이 부분도 사용 시에 고려해야할 거 같다.

 

주요 클래스

  • VivoxUnity.AccountId – 연결할 계정 및 접속 정보를 갖는다.
  • VivoxUnity.Client – 연결하는 세션 정보를 갖을 Client
  • VivoxUnity.LoginSession – Client 와 AccountId를 이용한 로그인 세션
  • VivoxUnity.ChannelId – 채널 식별 정보 (발급자, 채널명,  채널 종류(일반, 위치기반, 에코), 3D 속성)
  • VovoxUnity.ChannelSession – Login Session +
    ChannelId, GroupId  로 세션 관리

 

주요 Event

  • LoginSession.PropertyChanged – 로그인 세션 상태 변경시
  • ChannelSession.PropertyChanged – 채널 상태 변경
  • ChannelSession.Participants.AfterKeyAdded – 참가자 추가시
  • ChannelSession.Participants.BeforeKeyRemoved – 참가자 제거시
  • ChannelSession.Participants.AfterValueUpdate – 참가자 정보 업데이트
  • ChannelSession.MessageLog.AfterItemAdded – 채널 채팅 메시지 추가시
  • ChannelSession.SessionArchive.AfterItemAdded – The list of session archive messages returned by a BeginSessionArchiveQuery.

 

 

 

 

서버를 어떻게 해야할려나

현재 2009년식 iMac에서 여러 서비스를 돌리고 있어.

이 iMac 엔 추억이 가득 쌓였어.

처음 구매한 애플 장비이기도 하고, 첫 게임 회사에 입사하고, 새로운 환경에서 적응하기 위한 큰 몸부림을 함께 시작했어.

현재 오버 스펙으로 카탈리나까지 설치한 상태인데, 이로 인해, Target Display는 동작하지 않고, 여러 모듈들을 다시 설치해야했어. 물론, Metal API는 동작을 안해서, iMovie나 Final Cut Pro 등이 제대로 동작을 안해.

다시 서비스들을 올렸지만, 앞으로 어떻게 해야할지 고민이 계속 쌓이네.

그래도 나름 쓸만하 것은 Skype 자동 응답 계정을 만들어서, 가끔 집에있는 아이들이랑 바로바로 얘기하기도 하고, say command 로 컴퓨터가 얘기하는 것처럼 애들이랑 얘기할 수도 있어.

이녀석도 나처럼 나이가 들어가면서 새로운 일들을 하기에 부담이 조금씩 들어가는 거 같지만, 힘내자. 나도 힘내니깐~~!

Xcode 에서 com.apple.CoreSimulator.SimRuntime.iOS-12-4 오류 발생시

Xcode에서 com.apple.CoreSimulator.SimRuntime.iOS-12-4 라고 에러가 났어.

원인은 잘 모르지만, Xcode 가 업데이트가 제대로 안된 상태일 수도 있을 거 같음.

 

해결방법을 찾아보니, ‘Reboot’

(https://forums.deve1loper.apple.com/thread/120250)

 

해결됨.

 

 

새로운 Asset Type 생성

새로운 타입의 Asset 을 만들고 싶다.

Project Window 에서 t:XXXXXX 형식으로 쓰고싶다.

 

아래 코드는 ElgarProfile 이라는 Asset 타입을 생성한다.

[CreateAssetMenu(fileName = "NewAssetElgarProfile", menuName = "MyAsset/New Elgar Profile", order = 0)]
public class ElgarProfile : ScriptableObject
{
        public int m_Property;
}

 

Project 창에서 Create 메뉴에서 MyAsset / New Elgar Profile 항목을 선택해서 항목을 만들 수 있다.

Project 창 검색 필드에서  t:ElgarProfile 를 입력해서 찾을 수 있다.

[Shell Programming] 2. Shell

쉘(Shell)과 쉘 스크립트(Shell Scripts)

 

목차

  • 쉘이란?
  • 쉘의 기능들은?
  • 여러 쉘들
  • 하위 쉘들 – 자식 프로세스들
  • 하위 쉘 처리 절차
  • 쉘 스크립트는?
  • 스크립트 작성
  • 프로그래밍 용어
  • 논리적 흐름 제어
  • 쉘 스크립트 예제
  • 정리

 

쉘이란?

  • 컴파일된 프로그램
  • 사용자와 운영체제(커널)간의 인터페이스를 제공
  • 각 사용자를 위해 운영체제는 하나의 쉘 제공
    • 로그인
    • 터미널 실행
    • 콘솔창
  • 컴퓨터의 운영 전반을 제어할 수 있음.
  • 역할 관계

    • 그림과 같이 커널을 접근할 수 있는 시스템 인터페이스들을 사용자 인터페이스 프로그램들이 (System Call로) 접근할 수 있다.

쉘의 기능들은?

  • 명령줄 해석 기능
    • 예) 프로세스 상태를 첫번째 열로 정렬한 결과를 페이지 단위로 확인
      • ps -ef | sort +1 | more
  • 프로그래밍 언어
    • 특정 파일이나 프롬프트의 명령들을 통해서 절차적 언어를 작성할 수 있다.
  • 사용자 환경
    • 환경 설정
      • umask – 생성되는 파일의 접근 기본 권한 설정
      • PATH – 실행 파일을 찾는 경로 설정

여러 쉘들

  • 다양한 쉘들이 존재
  • Bourne Shell(sh)
    • AT&T Bell 연구소의 Steve Bourne에 의해 작성됨
    • 유닉스 쉘의 기원
    • 특징
      • 히스토리 지원
      • 내부 산술식 처리
      • 논리 표현식 처리
    • 보통 위치
      • /bin/sh
      • /sbin/sh
    • 기본 프롬프트 : $
      • root 는 #
  • C Shell(csh)
    • 캘리포니아 버클리 대학에 Bill Joy에 의해 작성됨
    • 특징
      • aliases
      • 명령 history
      • C 문법과 비슷한 구조를 사용
      • 내부 산술 연산 명령들 갖음
    • Bourne Shell 보다 크고 느림
    • 보통 위치
      • /bin/csh
    • 기본 프롬프트 : <hostname> %
      • root 는 <hostname> #
  • Korn Shell(ksh)
    • AT&T Bell 연구소의 David Korn에 의해 작성됨
    • Bourne Shell 기능 모두 제공
    • 추가 기능
      • C Shell의 인터렉티브 특성을 갖음
      • 프로그래밍 편의 기능 제공
        • 내부 산술기능, C와 유사한 배열 사용
        • 함수들
        • 문자열 변환기능
    • C Shell 보다 빠름
    • 보통 위치
      • /bin/ksh
    • 기본 프롬프트 : $
      • root 는 #
  • GNU Bourne-Again Shell(bash)
    • 일명 “배쉬쉘”
    • 리눅스의 기본 쉘
    • 기능
      • Korn 쉘, C 쉘의 유용한 기능들 제공
      • 방향키를 이용한 명령 재호출 및 수정 기능 강화
  • 기타 쉘
    • Desktop Korn Shell(dtksh)
    • Job Control Shell(jsh)
    • Restricted Shell Command Interpreter(rsh)
    • Enhanced C Shell(tcsh)
    • Z Shell(zsh)

하위 쉘들 – 자식 프로세스들

(작성중)

하위 쉘 처리 절차

(작성중)

쉘 스크립트는?

(작성중)

스크립트 작성

(작성중)

프로그래밍 용어

(작성중)

논리적 흐름 제어

(작성중)

쉘 스크립트 예제

(작성중)

정리

(작성중)

 

[Shell Programming] 1. Intro

쉘 프로그래밍에 대해서 따라해볼 내용을 정리합니다.

주요 환경은 맥, bash 에서 시작합니다.

따라하시며 참고하실 분들은 리눅스나, 유닉스, 맥 등에서 터미널을 열어서 작업할 수 있습니다.

 

주로 다룰 내용

  • 쉘은 무엇인가?(Shells, Shell Scripts)
  • 스크립트 작성과 디버깅(Writing and Debugging Scripts)
  • 쉘 환경(The Shell Environment)
  • 외부 명령
    • grep
    • sed
    • awk
  • 조건 처리(Conditionals)
  • 사용자 입력하기 (Interactive Scripts)
  • 반복 (Loops)
  • 내부 변수(Advanced Variables)
  • 파라미터와 인자 목록(Parameters and Argument List)
  • 함수(Functions)
  • 시그널 처리(Traps)

여기는…

그동안 나름 여러 날 동안 이런 저런 글들을 써왔는데,

운영했던 서버의 하드에 문제가 생겨서 복구중에 있습니다.

다시 새로 발견된 노하우나, 기술 튜터리얼을 작성할 예정입니다.

관심을 갖고 찾아와주신 분들께 감사의 말씀 올립니다.

기술로 많은 사람들이 행복해지는 세상이 되길 바래요.