Unity 3D 로고

 

안녕하세요 철사마입니다.

오늘은 PC를 새로 세팅하고 유니티를 설치한 후에 전에 생기지 않았던 문제가 생겨 해결 방법 정리해 보았습니다.

 

윈도우로 유니티에서 스크립트를 편집하면 보통 Visual Studio + C# 조합을 쓰게 됩니다.

그런데 유니티를 설치하여 개발할 때 C# 자동완성이 되지 않는 경우가 있다는 것을 발견했습니다. 

Visual Studio Logo



해결 방법은 다음과 같습니다.

* 우선 비주얼 스튜디오와 유니티를 닫습니다.

시작-실행-appwiz.cpl 입력 (또는 '프로그램 추가/제거' 찾아서 실행)

* 'Microsoft Visual Studio Installer' 를 찾아서 마우스 오른쪽 클릭 - 변경


* Visual Studio '수정' 클릭


* 오른쪽에서 'Unity를 사용한 게임 개발' 항목을 확장하고 'Unity 20XX 64비트 편집기' 체크

* 수정 하면 설치가 됩니다

* 혹시 모르니 '개별 구성 요소' 탭 - 코드 도구 - 'NuGet 패키지 관리자' 체크가 안되어있으면 체크 


* 대게 여기까지만 하고 유니티와 VS를 다시 켜면 대부분 인텔리센스가 동작합니다.

 

 


* 혹시 그래도 안되면 환경 설정에 비쥬얼 스튜디오가 설정 되어 있는지 확인해보세요


* 이제 유니티, VS를 켜면 자동완성이 될 것입니다.

 

하지만 이렇게 해도 안되면 설치할 때 오류가 난 것일 수 있으니 다시 삭제하고 다시 설치하는 것을 추천 드립니다.

해보면 별거 아니지만 모르면 고생하는!

도움이 되는팁이 되었으면 좋겠습니다.

 

그럼 오늘도 즐거운 Unity와 함께하세요~

안녕하세요 철사마 입니다.

DB가 문제없이 잘 돌아가면 좋겠지만 멀쩡하던 쿼리가 갑자기 느려지는 경우가 있습니다.

원인 중 하나가 LOCK이 걸려서 그런 경우가 있는데요, 현재 DB에 LOCK이 걸린 쿼리가 있는지 조회하고 해당 쿼리 실행을 종료하는 것까지 정리해 보았습니다.

 

 

일반적으로 sp_lock 실행을 하려면 실행 권한이 있어야 하는데 실행권한이 없으면 아래와 같은 오류 메시지가 발생합니다.

 

사용자에게 이 동작을 수행할 권한이 없습니다. 

 

이때 자신의 계정에 VIEW SERVER STATE 권한이 필요 합니다.

 

grant alter server state to '권한을 줄 계정이름'

 

권한이 부여가 되어 스크립트를 실행할 준비가 되었다면 아래를 참고해 주세요

 

1. 현재 실행중안 DB의 잠금에 대한 정보를 확인합니다.

-- Lock이 걸린 SPID를 추출합니다.
-- Mode 부분이 X로 나오면 LOCK이 걸린 것입니다.
EXEC sp_lock 108 


-- Mode가 X로 되어 있는 spid의 숫자를 대입합니다.
-- SPID의 소유자가 누구인지 확인합니다.
EXEC sp_who2 108


-- LOCK이 걸린 대상 스크립트가 출력됩니다.
DBCC INPUTBUFFER(108)


-- LOCK을 유발시키는 spid를 종료 시킵니다.
KILL 108 

 

위에 설명이 되었던 sp_lock 에 대해 열 이름을 상세하게 표로 정리된 내용이 공식 microsoft 사이트에 공개되어 있어 정리하였습니다.

(출처 : https://docs.microsoft.com/ko-kr/sql/relational-databases/system-stored-procedures/sp-lock-transact-sql?view=sql-server-ver15 )

 

 

 

 

 

 

안녕하세요 사마사마입니다.


구글 번역기 많이 쓰시죠?

쉬운 번역 기능도 마음이 들지만, 스피커를 눌러서 번역 문장 읽어주는게 개인적으로 참 재미있더라고요...


혹시나~! 구글 번역기 쓰면서 음성을 파일로 저장하고 싶은데 방법을 모르셨던 분들!

좋은 팁이 있어서 공유합니다.


제가 직접 해본거라서 차근차근 설명을 해 드리려고 합니다.

그대로 따라하면 쉽게 이해할 수 있으니 도전~!


우선 크롬 브라우저가 필요합니다.

(다른 브라우저에서 될 수도 있으나, 전 크롬에서만 해봤기 때문에 크롬 기준으로 설명합니다.)

크롬 브라우저가 깔려있지 않다고요? 그럼 설치하심 됩니다. 무료입니다.

크롬 브라우저 다운로드 : https://www.google.com/intl/ko_ALL/chrome/



크롬을 다운로드 하셨으면 구글 번역기 페이지를 열어주세요.

사이트 주소 : https://translate.google.co.kr/


저는 임시로 "구글 TTS파일을 다운로드 할 수 있습니다." 라는 TEXT를 적었습니다.




다 적으셨으면 이제 개발자 모드로 들어가 보겠습니다.

단축키 "F12"를 누르면 크롬 개발사 모드가 열리면서 오른쪽에 창이 하나 생기게 됩니다.

그 창에서 Network > Media 메뉴를 클릭하세요.

그리고 번역기의 스피커 모양을 누르시고 TTS 음성을 들으면 오른쪽에 리스트가 하나 생기게 됩니다.

그게 TTS 음성 파일의 저장 정보입니다.



그 리스트를 오른쪽 마우스로 클릭하고 "Open in new tab" 메뉴를 클릭합니다.


메뉴를 클릭하면 새로운 탭이 열리면서 음성 파일만 플레이 되게 됩니다.


그 창에서 오른쪽 마우스를 누르고 "다른 이름으로 저장"을 클릭하고 내 컴퓨터에 Voice 파일을 저장합니다.


저장하고 싶은 위치에 저장을 하고 확인을 누르면 mp3 파일이 저장됩니다.

translate_tts.mp3 라는 파일명으로 저장아 됩니다.

폴더에 저장이 잘 되었으면 성공한 것입니다. 완료~! 참 쉽죠? ^^



혹시 어떻게 음성이 들리는지 궁금하실 수 있어서 translate_tts.mp3는 파일로 업로드 해 놓겠습니다.

어차피 딱히 의미는 없겠지만.. 호옥시 모르니... 





좀 더 쉽게 핵심만 짚어서 동영상으로도 구성해 보았습니다. 한번 쭉 보시면 아~아~ 하실꺼에요 :)

최근 에프터이팩트 공부하고 있는데 공부할겸 짬짬히 동영상도 만들어 보고 있습니다. ^^

도움이 되셨다면 유튜브 좋아요 구독, 공유... 뭐 그런거 하심 제가 참 기분이 좋을 것 같습니다. ^0^

당근 블로그도 좋아요, 공유... 해주심 좋아요... ㅎㅎ





애프터이펙트를 하다가 동영상 랜더링을 할 때 황당한 에러가 발생하곤 합니다.


After Effects 오류 : "ㄴㄷㅎㅁㄴㄷㅎㅁㄴㄷㅎ" 파일에 쓰는 동안 렌더링 오류가 발생했습니다. (-1610153453)


이런 식의 오류입니다. 대게 랜더링 옵션에서 AVI를 H.264로 지정했을 때 자주 발생한다고 하는데... 제가 보기엔 꼭 그런것 때문만은 아닌 듯 하고요..




제가 확인해본 결과로 오류는 바로 파일의 저장 경로에 있습니다.

저장 경로에 한글이 포함되어 있으면 100% 오류가 발생합니다.





영어로 저장경로를 바꿨더니 오류가 발생하지 않더군요..

혹시 모르니 에프터이펙트 작업을 하실 때는 한글 폴더를 사용하지 말아주세요! 정신건강에 해로울  수 있습니다. ^^;;



<오늘의 팁!>


(-1610153453) 오류 발생시!


저장 폴더에 한글이 포함되어 있는건 아닌지 확인한다!


애프터이펙트(Adobe After Effects)를 사용하는데 유용한 단축키 모음입니다.


레이어 시작(끝)부분 맞추기

<단축키 설명>

[ : 레이어 시작 부분 맞추기

] : 레이어 끝 부분 맞추기


예제)

맨위의 빨강색 레이어를 기준으로 합니다.(마커를 중간에 설정하고 해당 레이어를 선택한 상태)


단축키 "["를 눌렀을 경우

레이어의 앞부분이 마커 에 붙습니다.


단축키 "]"를 눌렀을 경우

레이어의 뒷부분이 마커에 붙습니다.



레이어 앞(뒤) 자르기

<단축키 설명>

alt + [ : 레이어 앞 부분 자르기

alt + ] : 레이어 뒷 부분 자르기


예제)

위에서 세번째 하늘색 레이어를 기준으로 합니다.(마커를 중간에 설정하고 해당 레이어를 선택한 상태)


단축키 "alt + ["를 눌렀을 경우

레이어의 앞 부분이 잘렸습니다.



단축키 "alt + ]"를 눌렀을 경우

레이어의 뒷 부분이 잘렸습니다.



레이어 잘라서 나누기

<단축키 설명>

ctrl + shift + D : 레이어 잘라서 나누기



예제)

위에서 세번째 하늘색 레이어를 기준으로 합니다.(마커를 중간에 설정하고 해당 레이어를 선택한 상태)



단축키 "ctrl + shift + D"를 눌렀을 경우

동일한 레이어가 복사되면서 위아래로 잘려서 나누어졌습니다.


작업구간 설정하기

<단축키 설명>

B : 시작 설정하기

N : 끝 설정하기


마커에 맞춰서 Work Area를 설정합니다.

Work Area는 램프리뷰나 실제 렌더링 할때 랜더링 되는 지정된 구간을 뜻합니다.


예제)

위에 Work Area는 전체로 설정되어 있으며 중간에 마커를 두었습니다.



단축키 "B"를 눌렀을 경우

마커를 기준으로 Work Area의 시작이 맞춰집니다.


단축키 "N"를 눌렀을 경우

마커를 기준으로 Work Area의 끝이 맞춰집니다.



컴포지션 작업 창 닫기

<단축키 설명>

ctrl + W : 시작 설정하기


작업을 하다보면 컴포지션이 많아지는데요, 해당 컴포지션 창을 닫는 기능입니다.


예제)



단축키 "ctrl + W"를 눌렀을 경우

창 사라짐. 창만 사라지며 삭제되는 것은 아닙니다.



레이어의 크기를 컴포지션 크기에 딱 맞게 맞추기

<단축키 설명>

ctrl + alt + F : 시작 설정하기


예제)

컴포지션 영역에 비하여 이미지 크기가 너무 작은 상태

단축키 "ctrl + alt + F"를 눌렀을 경우

컴포지션 영역에 딱 맞게 이미지(동영상 포함)가 맞춰졌습니다.

(이미지 크기가 컴포지션 영역과 비율이 안맞을 경우 이미지가 늘어나 보일 수 있습니다.)




별건 아니지만 모르셨다면 도움이 되셨으면 좋겠습니다.

에프터이펙트는 하면 할수록 단축키를 모르면 작업이 너무 불편한 것 같습니다. ㅠㅠ


다음에 또 한차례 정리할게요!

감사합니다.

안녕하세요 철사마입니다.

오랜만에 유니티 팁을 기억해 놓으려고~ 개발 포스팅을 하게 되었습니다. :)

(이미지 출처 : 구글 이미지 검색)


따지고 보면 별건 아닌데, 모를 때는 방법을 몰라 매우 궁금했던 것인데요.

바로 화면 해상도 고정 방법입니다.


예를 들어 유니티에서 화면에 보이는 모습과 핸드폰에 보이는 모습이 다를 경우가 있습니다.

특히 2D의 경우는 더 심한데 개발시 화면에 보이는 것과 핸드폰이 동일해야 개발할 때 예측이 잘 될거라서 실제 화면과 다르다면 개발할 때 참 불편할 것입니다.


분명 방법이 있을 것 같아서 여기저기 찾아보니 이런 쉬운 방법이 있더군요!


바로 SetResolution 이라는 함수를 쓰면 쉽게 할 수 있습니다. 두둥~


Screen.SetResolution


public static void SetResolution(int width, int height, bool fullscreen, int preferredRefreshRate = 0);


화면의 해상도를 전환합니다.


A width by height resolution will be used. If no matching resolution is supported, the closest one will be used.


If preferredRefreshRate is 0 (default) Unity will switch to the highest refresh rate supported by the monitor.

/preferredRefreshRate/가 0이아니면 유니티는 모니터가 지원한다면 사용하고, 아니면, 지원되는 highest중 하나를 선택할 것입니다.


웹 플레이어상에서는 사용자가 컨텐츠를 클릭한 후에 해상도가 변경됩니다. The recommended way of doing it is to switch resolutions only when the user clicks on a designated button.


On Android fullscreen controls the SYSTEM_UI_FLAG_LOW_PROFILE flag to View.setSystemUiVisibility(), on devices running Honeycomb (OS 3.0 / API 11) or later.


On Windows Store Apps, switching to non-native resolution is only supported starting from Windows 8.1 and newer.


전체화면 전환은 바로 적용되지 않습니다; 현재 프레임이 끝날 때 적용됩니다.

// Switch to 640 x 480 fullscreen

Screen.SetResolution(640, 480, true);


다른 예제:

// Switch to 640 x 480 fullscreen at 60 hz

Screen.SetResolution (640, 480, true, 60);


다른 예제:

// Switch to 800 x 600 windowed

Screen.SetResolution (800, 600, false);


See Also: resolutions property.

출처 : UNITY 스크립팅 API



좀 더 쉽게 설명을 하자면...


Screen.SetResolution(가로 픽셀, 세로 픽셀, full screen 유무, 지원되는 해상도 지정-기본 0으로 설정되어 있음);


640x480 사이즈에 Full Screen 으로 설정하고 싶다면

Screen.SetResolution(640, 480, true);

이렇게 하시면 됩니다.


주의할 점은 최초 실행시 실행되는 스크립트에 적어주셔야 정상적으로 적용이 됩니다.


그럼 테스트를 위해 몇가지 단계를 순서대로 진행해 보겠습니다. 스탭바이 스탭으로 진행되니 길어도 쉽게 읽어보심 바로 아실 것 같아요!


우선 유니티 새 프로젝트를 만드시고...


예제로 유니티에선 화면 사이즈를 720x1280으로 설정해 보았습니다.

그리고 사이즈가 꽉 차게 나오는지 양 모서리에 이미지를 위치하였습니다. 



양 모서리에 들어간 이미지는 새해라서 .. 돼지해 이미지로 했습니다. :) 이미지는 인터넷 검색으로...

새해 복 많이 받으세요 ^^



테스트를 위해서 대충 한거긴 한데.. 설명을 하자면,

Scene에서 Empty한 Game Object를 생성하시고.. 전 Canvas라고 이름을 정했습니다.

그 Object에 C# 스크립트를 하나 생성해서 붙였습니다. 전 스크립트 이름을 script.cs로 정했습니다.


script.cs 스크립트에 해상도 설정 스크립트를 추가합니다.

이 함수는 최초 실행시에 불려야 하기 때문에 Start() 보다 빠른 Awake()에 붙여 넣었습니다.


    void Awake()

    {

        Screen.sleepTimeout = SleepTimeout.NeverSleep;

        Screen.SetResolution(720, 1280, true);

        

    }


위에 Screen.sleepTimeout = SleepTimeout.NeverSleep; 코딩은 게임 실행 중 화면이 꺼지지 않게 하는 설정입니다. 참고해 주시고...



맨 위의 Rect Transform 에 나오는 사이즈는 Game View의 화면 사이즈입니다.

화면 사이즈를 720x1280으로 설정해 주시고,



Canvas Object에 script.cs 파일을 연결해 주었습니다.


그 후에 Add Component를 클릭하여 [Canvas] 와 [Canvas Scaler (Script)] 를 우선 추가합니다.


Canvas 에서는

Render Mode 에서 Screen Space - Camera 로 설정해서 메인 카메라와 동기화를 시킵니다.


Render Camera 항목에 메인 카메라를 적용 시킵니다. 


Canvas Scaler (Script) 에서는 

UI Scale Mode 에서 Scale With Screen Size로 설정하여 Canvas Object의 하위 리스트에서도 동일하게 Scale이 적용할 수 있도록 설정합니다.


그리고 스케일의 기준 값을 720, 1280으로 적어줍니다.

아래 보이는 Match는 720x1280을 벋어나는 해상도가 있을 때 어디를 기준으로 Match를 할 것인지를 결정합니다.

Width로 하면 가로, Height 로 하면 세로를 기준으로 스케일이 진행됩니다.




여기까지 설정했으면 끝입니다.

빌드를 해보고 폰에 담아보면 이렇게 나옵니다.

이미지는 대충 위치한거라 조금 오차가 있네요..;;


보시면 잘 맞지요? 이런 식으로 화면 해상도를 기준하여 작업하면 개발이 좀 더 수월해 질 거 같습니다.


혹시 다른 팁이 있으신 분은 알려주세요!

처음 개발할 때 틀을 잡는게 매우 어렵더라고요..

정보 공유해요! :)


감사합니다.!



안드로이드 스튜디오로 간단하게 플래시가 나오게 작업을 해보았습니다.

그런데 정상작동을 안합니다. 오류도 없고..

이리저리 다 해봤는데 모르겠네요.. 


나중에 해결되면 업데이트 하려고 블로그에 백업해 놓습니다. ^^

혹시 아시는 분 댓글 달아주세용...


조사해본 결과로 카메라 관련 퍼미션은 아래의 내용 정도로 모두 되는 것 같습니다.


    <uses-permission android:name="android.permission.CAMERA"/>

    <uses-permission android:name="android.permission.FLASHLIGHT"/>

    <uses-feature android:name="android.hardware.camera"/>

    <uses-feature android:name="android.hardware.camera.flash"/>


소스는 아래와 같은데. 작동은 안됩니다.

참~ 이상하군용 @_@


package com.example.cholm.flashlight;

import androidx.appcompat.app.AppCompatActivity;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

private Button onOffButton;
private Camera _camara;
private Camera.Parameters parameters;
private boolean isFlashOn = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
onOffButton = (Button) findViewById(R.id.button);
onOffButton.setOnClickListener(this);
}


public void getCamera(){
if(_camara == null){
try{
_camara=Camera.open();
parameters= _camara.getParameters();
}
catch (Exception ex)
{
Toast.makeText(this, ex.toString(), Toast.LENGTH_LONG).show();
}

}
}

@Override
public void onClick(View view){
if(view == onOffButton){
if(isFlashOn){
turnoffFlash();
}
else
{
getCamera();
tuneOnFlash();
}
}
}

public void tuneOnFlash()
{
try{
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
_camara.setParameters(parameters);
_camara.startPreview();
isFlashOn=true;
onOffButton.setText("OFF");
}
catch (Exception ex){
Toast.makeText(this, ex.toString(), Toast.LENGTH_LONG).show();
}
}

public void turnoffFlash(){
try{
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
_camara.setParameters(parameters);
_camara.stopPreview();
isFlashOn=false;
onOffButton.setText("ON");
}
catch (Exception ex){
Toast.makeText(this, ex.toString(), Toast.LENGTH_LONG).show();
}
}

@Override
public void onStop(){
super.onStop();
if(_camara!=null){
_camara.release();
_camara = null;
parameters = null;
}
}

@Override
public void onRestart(){
super.onRestart();
}
}

대체 이유가 뭘까....

안녕하세요 철사마 입니다.

안드로이드 스튜디오를 하면서 황당하게 발생하는 에러가 있어서 해결방법 정리하였습니다.

저처럼 당황해서 놀라지 마시길 바라면서 정리해 보았습니다.. ㅠ^ㅠ




황당한 에러는 디자인 뷰 영역 에러 입니다. 


이게 왜 황당하냐면 디자인 뷰 영역에 어떤 컨텐츠를 넣어도 보이지 않고 위치도 지정할 수 없고 에러만 계속 뜹니다....

빌드하면 제대로 나오지도 않아서 작업을 할 수 가 없습니다..;;;


에러 문구는 아래와 같습니다.


Failed to load AppCompat ActionBar with unknown error.


대충 해석하면... "알수 없는 에러로 AppCompat ActionBar를 로드하지 못합니다." 


난 아무 것도 하지 않았는데?.. 왜 이런 에러를.. 그리고 하단에는 이런 에러 문구가 있습니다.


This view is not constrained. 

It only has designtime positions, so it will jump to (0,0) at runtime unless you add the constraints  The layout editor allows you to place widgets anywhere on the canvas, and it records the current position with designtime attributes (such as layout_editor_absoluteX). 

These attributes are not applied at runtime, so if you push your layout on a device, the widgets may appear in a different location than shown in the editor. 

To fix this, make sure a widget has both horizontal and vertical constraints by dragging from the edge connections.


대충 해석하면... "이 뷰는 강제적인 것이 없어서... 제약 조건을 추가하지 않으면 네가 추가한건 0.0으로 위치합니다. 블라블라.. 네가 원하는 것이랑 다르게 나올 수 있다.. 블라블라.."  당췌 몬소린지..


여튼 아무것도 안하고 프로그램 실행만 누른 입장에서 에러가 뭔가 억울합니다. 

마치 컴맹이 컴터 키고 블루스크린 뜨면 왠지 내 손이 똥손이라 망가진 것 같고 막... ㅠㅠ






하지만! 안심하세요~ 해결은 생각보다 쉽습니다.


우선 아래 위치로 이동해서 명시한 부분의 해당 소스를 수정해 줍니다.


1. Gradle Scripts에서 build.gradle (Module: app) 파일을 더블클릭하여 열어줍니다.

2. 23번 라인 implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'에서 alpha3alpha1으로 수정합니다.



코드를 수정한 화면입니다.


수정을 하면 안드로이드 스튜디오 코드 편집창 상단 우측에 [Sync Now] 라는 바가 생겨납니다.

그 버튼을 눌러서 동기화를 시켜줍니다.


동기화를 눌러주면 동기화가 되면서 이것저것 열심히 적용됩니다.


적용이 다 된후에 다시 레이아웃(Layout) 화면으로 이동해 봅니다.

이제 화면상에 콘텐츠가 제대로 레이아웃에 나타나고 에러도 발생하지 않습니다.


이 오류는 구글 검색해 보니 안드로이드 스튜디오 버그안드로이드 스튜디오 3.1.3 버전 기준에서 다운로드 받으면 발생하는 버그입니다.

앞으로 업데이트되는 버전에서는 해결되어 있을 것 같습니다. (제발~~)




처음 시작하는 초심자 입장에서 아무것도 안했어도 왠지 내가 잘못한 건 아닐까 하는 불안감이 생기는 오류였습니다.

다행히 해결 방법은 어렵지 않지만~~

모르면 아무것도 시작할 수 없는 그런 치명적인 버그였습니다.

쉽게 수정하시고 코딩을 시작해보세요!!



+ Recent posts