블로그 이미지
Every unexpected event is a path to learning for you.

카테고리

분류 전체보기 (2366)
Unity3D (587)
Programming (473)
Unreal (4)
Gamebryo (56)
Tip & Tech (191)
협업 (36)
3DS Max (3)
Game (12)
Utility (117)
Etc (92)
Link (31)
Portfolio (19)
Subject (90)
iOS,OSX (38)
Android (13)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (1)
Memories (20)
Interest (37)
Thinking (37)
한글 (26)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (19)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total1,365,172
Today0
Yesterday373
Statistics Graph

달력

« » 2020.2
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29

공지사항

태그목록

[링크] https://jwidaegi.blogspot.com/2019/07/unity-notch-ui.html

 

Unity Notch(노치) 단말기 UI 설정

상단의 프레임 아래쪽으로 툭 튀어나와 있는 H/W 영역인 Notch의 처리를 위해 체크해야 하는 항목을 정리해 둔다. 빌드 세팅 Player Setting > Android > Resolution and Presentation 내부 설정 확인 ...

jwidaegi.blogspot.com

 

Posted by blueasa

댓글을 달아 주세요

if (animator.GetCurrentAnimatorStateInfo(0).IsName("YourAnimationName"))
{
    // do your magic
}

 

[출처] https://stackoverflow.com/questions/23449494/is-there-an-isplaying-type-function-for-animator

 

Is there an isPlaying() type function for Animator

I know you can do animation.isPlaying() but is there something similiar for Animator ? So if I have: Animator animator; void Start() { animator = GetComponenet(); } Then I c...

stackoverflow.com

 

Posted by blueasa

댓글을 달아 주세요

텍스트 메쉬 프로에 대한 사용법에 대하여 검색용으로 간략히 적어 놓습니다.

편하게 적다 보니 반말체인 점 양해 부탁드립니다.

---------------------------------------------------------------------------------------------------------

ㅁ 텍스트 메쉬 프로(이하 텍메프)의 설치
  1. 유니티 메뉴의 Window -> Package Manager 에서 받아서 설치한다.





ㅁ 텍메프 생성


  1. 하이라키 뷰에서 마우스 오른쪽 클릭 -> UI -> Text - Text Mesh Pro를 실행한다. 텍메프는 유니티 GUI 기능을 이용하며 이는 캔버스 내부에 사용한다.



ㅁ 폰트 에셋
  텍메프는 폰트 파일(ttf)가 아닌 폰트 파일을 이용해서 만든 폰트 에셋을 사용한다. 폰트 에셋 생성은 다음과 같다. (한글 파일 기준)




1. 유니티 메뉴의 Window -> TextMeshPro -> Font Asset Creator 를 실행한다.

2. Source Font File에 폰트 파일(ttf)를 입력한다.

3. Padding에 글자 간 간격을 입력한다. 4~5 정도가 적당한 듯 하다.

4. Atlas Resolution에서 아틀라스 이미지 파일의 크기를 결정한다. 한글 폰트의 경우 4096 X 4096 정도는 되어야 할 듯 하다.

5. Character Set에서 어떤 방식을 사용할지 결정 할 수가 있다.




주목할 점은 Custom Range, Custom Characters.

- Custom Range 은 폰트의 글자 위치를 이용하여 아틀라스로 만들 글자를 정한다.

- Custom Characters는 특정 원하는 글자를 직접 입력하여 원하는 글자를 추출할 수 있다. "가나다"라고 입력 시 가나다 3글자만 추출한다.

여기서는 Custom Range를 이용하여 모든 글자를 추출한다.

6. Character Sequence에 추출할 글자를 입력한다.

완성형 기본 한글의 경우 44032-55203을 입력한다.

7. Rander Mode를 설정 한다.

 



특정 렌더 모드이 경우 텍메프에서 메테리얼이 비트맵 형식으로 가공된다. 이 경우 아웃라인등 추가적인 효과를 입력하기 어렵다.

이번에는 추가적인 효과를 입력할 수 있는 Distance Field 형식이 필요하기에 SDF32 방식으로 설정한다.

- 특정 렌더 모드의 경우 글자 끝을 둥글게 처리한다. 즉 고딕 폰트를 설정하였는데 돋음체 처럼 끝이 둥근 형태로 나올 수 있다.
- 추후 메테리얼을 직접 Distance field 로 변경할 수 있다. 하지만 이 경우 한글에 아웃라인 등 추가적인 효과가 적용되지 않는 것을 확인하였다.

8. Generate Font Atlas를 클릭하여 굽는다.



굽는다. 시간이 오래 걸린다.




시간이 오래 걸리니 귀여운 고양이를 보자.

귀엽다.





안고도 잔다.

귀엽다.





배고도 잔다.

귀엽다.





귀엽다.



9. 폰트 에셋이 노릇노릇 구워 지면 Save를 눌러 저장하자. 저장하는 걸 잊지 말자.


ㅁ 텍메프에 폰트 에셋 연결


1. 텍메프의 인스팩터 뷰에서 Font Asset 부분에 방금 구워진 폰트 에셋을 추가한다.


2. 한글을 입력해 본다.

잘 나온다.



ㅁ 프리셀



이건 프리셀이다.



ㅁ 메테리얼 프리셋

텍스트 메테리얼 부분을 이용하여 특정 효과를 입력 추가 하여 보자.



폰트에 아웃라인을 추가하였다. 하지만 이때 문제는 같은 메테리얼을 공유하는 모든 텍메프에 효과가 동일 하게 적용된다.

우선 추가로 다른 메테리얼을 추가해 보자.


1. 폰트 에셋의 작은 삼각형 화살표를 열고 메테리얼 파일을 복사한다.  (맥 기준 Alt + D.. 윈도는 컨트롤 디였던가…?)


2. 복제된 메테리얼의 이름을 수정한다. 이때 폰트명은 폰트 에셋의 이름이 반드시 포함되어야 한다.
예 ) 폰트 에셋 명 : "NSquareB" , 추가된 메테리얼 명 "NSquareB Outline"


3. 텍메프의 인스펙터뷰의 Material Preset에서 새로 추가된 메테리얼을 선택 후 원하는 효과를 추가해 보자.

메테리얼을 변경한 텍메프에만 효과가 적용되는 걸 확인할 수 있다.



ㅁ 로컬라이징
한글 외에 일본어 중국어 등이 추가하여 새로운 폰트 에셋을 생성할 경우 앞에서 만든 기존의 폰트 에셋을 사용할 수 없다.

폰트에셋과 이름이 다른 메테리얼을 사용할 수가 없기 때문이다. (메테리얼에 적용된 아틀라스가 다르니... )

아마 로컬라이징을 생각하는 경우 언어별로 폰트에셋을 사용해야 하는데 이 경우에는 테그를 이용하는 게 편할 듯 하다.



1. 텍메프의 Text 부분에 다음과 같은 테그를 입력하여 적용할 수 있다.

폰트 변경 : font="폰트에셋명"
메테리얼 변경 : material="메테리얼명"

2. 테그 잘 안다고 material = "이름" 같이 사이 띄기 넣지 마라. (내가 헤맨 건 절대 아님….)

3. 이때 폰트 에셋과 메테리얼은 Resources 폴더 안에 위치해야 한다.



ㅁ 스타일
사실 저 테그가 게임 내에 들어갈 글귀들과 함께 들어가기에는 좀 길다. 스타일을 이용하여 단축할 수 있다.


1. 프로젝트뷰에서 텍메프 폴더 하단에 Style Sheets폴더 안 Default Style Sheet 파일을 선택 한다.


2. 인스팩터 뷰의 스크롤을 내린 뒤 + 버튼을 클릭한다.

3. 아무런 변화가 없다.

4. 당황하지 말고 Next를 눌러 다음 페이지로 넘기자.

5. 아마 마지막과 같은 내용의 스타일이 하나 더 추가되어 있을 것이다.



6. 원하는 Name을 입력 후 원하는 테그를 입력한다.

7. 저장 버튼을 누른다.

8. 속았다. 저장 버튼은 없다. 자동 저장이다.



9. 6에서 입력한 Name을 스타일 테그로 불러올 경우 정상적으로 동작하는 것을 확인할 수 있다.

(마지막 이미지의 붉은 글씨가 헷갈릴 수 있을 거 같다. 선택된 텍메프 오브젝트는 위의 글씨다.)

 

 


[추가]
하나 더 추가합니다.

로컬라이징 부분에서 한글 영어, 일어, 등 변경 사항이 있을 때 위에는 폰트 에셋과 메테리얼을

테그로 손보는 방식을 생각해 봤는데 더욱더 간단한 방법이 될 수도 있을 거 같아요.

만드신 폰트 에셋을 선택하고 인스팩터 뷰에서 스크롤 쭉 내리시면 위의 이미지와 같은

Fallback Font Assets이라는 부분이 있습니다.

이건 입력한 문자가 폰트에셋에 없으면 다른 폰트 에셋의 문자로 대처할 수 있는 기능이에요.

여기에 한국어 영어 일본어 등 추가 폰트 등을 물려 놓을 경우 별도의 폰트 로컬라이징 필요 없이

바로 자동으로 연결이 되네요.

 

 

[출처]

http://www.gamecodi.com/board/zboard.php?id=GAMECODI_Talkdev&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=5297

루트군님

 

유니티 텍스트 메쉬 프로에 대한 사용법 간략 정리

텍스트 메쉬 프로에 대한 사용법에 대하여 검색용으로 간략히 적어 놓습니다.편하게 적다 보니 반말체인 점 양해 부탁드립니다.--------------------------------...

www.gamecodi.com

 

Posted by blueasa

댓글을 달아 주세요

Rim lighting and realtime shadows for sprites in Unity (2D) – 1/2

Rim lighting and realtime shadows for sprites in Unity (2D) – 2/2

 

[github] https://github.com/Rafarfn/SpriteLighting

 

Rafarfn/SpriteLighting

Custom 2D sprite lighting with shadow casting and rim lighting - Rafarfn/SpriteLighting

github.com

 

Posted by blueasa

댓글을 달아 주세요

 

https://github.com/sunduk/UnityRoundedShader

 

 

유니티에서 셰이더로 원이나 모서리가 둥근 사각형 만들때 쓸 수 있는 셰이더 입니다.

구글 검색하면 자료는 많이 나오는데 쉽게 이해되는 코드가 없는것 같아서 정리할겸 만들어 봤습니다.

 

UI쪽은 사실 유니티에서 지원하는 mask기능도 있어서 쓸일이 많지는 않겠지만

실시간으로 만든 텍스쳐 다룰때는 유용할것 같습니다.

 

 

p.s 

이거 구현하면서 인터넷과 구글이 없었으면 어떻게 이런 기법들을 배우고 공유할 수 있었을까 하는 생각이 많이 들었습니다.

특히 셰이더토이, 더 북 오브 셰이더 여기 두곳은 정말 보물섬 같은 곳이네요.

 

https://www.shadertoy.com/view/ldfSDj

https://thebookofshaders.com/

 

 

[출처]

게임코디 태풍의그라운드

http://www.gamecodi.com/board/zboard.php?id=GAMECODI_Talkdev&page=1&page_num=35&select_arrange=headnum&desc=asc&sn=off&ss=on&sc=on&keyword=&no=5239&category=

Posted by blueasa
TAG SHADER, Unity

댓글을 달아 주세요

[링크]

http://blog.naver.com/simtt/220851899973

 

[Unity] 유니티 Local Notification을 활용해보자

iOS의 경우 Unity 자체에서 로컬 알람 기능을 제공해준다. 안드로이드는 직접 구현할 수도 있지만, 그냥...

blog.naver.com

 

Posted by blueasa

댓글을 달아 주세요

 

[링크]

https://lib.dasony.net/7

 

[NATIVE, ANDROID] Local Notification(로컬 알림) 유니티 플러그인

개요 유니티에서 네이티브 알림 기능을 iOS 만 제공하고 있습니다. 안드로이드에서 로컬 알림을 이용하려면 플러그인을 직접 제작하거나 다른 사람이 만들어 둔 플러그인을 사용해야 합니다. 이번에 다소니닷넷에..

lib.dasony.net

 

Posted by blueasa

댓글을 달아 주세요

Unity Local Notification (For android)

This repository allows to send local notification from unity project on android devices.

Features

  • you can send local notification in android
  • you can schedule sending notification for some time in future
  • you can send notification having big picture style

Issues

  • not all android notification features are supported

Sample code

Publisher publisher = PublisherManager.Instance.CreatePublisher(channelId, channelName, channelDescription); // put your icon png file in Plugins/Android/UnityLocalNotification/res/drawable Notification notification = new Notification() .SmallIconName("test_icon") .Title("My notif title") .Message("This is a test notification message"); publisher.Publish(notification);

Screenshots

Unity asset

Unity local notification asset

Class diagram

class diagram

 

 

[출처] https://unitylist.com/p/g72/Unity-Local-Notification

 

Unity Local Notification

Send Android local notification from unity project source code

unitylist.com

 

Posted by blueasa

댓글을 달아 주세요

Easy Way

I think this easier approach applies if your Unity project is being built with gradle. If it isn't, here is one more reason to upgrade.

Also, a big shout-out to an article called, Hey, Where Did These Permissions Come From?)

  1. Build Your Project
  2. Open the file /path/to/my/project/Temp/gradleOut/build/outputs/logs/manifest-merger-release-report.txt
  3. Profit!
  4. Search the file for the name of your permission, and it'll show you where it came from.

Here is part of the file, where I'm looking for the WRITE_EXTERNAL_STORAGE permission.

uses-permission#android.permission.WRITE_EXTERNAL_STORAGE ADDED from /Users/clinton/Projects/<<ProjectName>>/Temp/gradleOut/src/main/AndroidManifest.xml:7:3-79 MERGED from [gradleOut:IronSource:unspecified] /Users/clinton/Projects/<<ProjectName>>/Temp/gradleOut/IronSource/build/intermediates/bundles/default/AndroidManifest.xml:13:5-81 android:name ADDED from /Users/clinton/Projects/<<ProjectName>>/Temp/gradleOut/src/main/AndroidManifest.xml:7:20-76

Hard Way

There are three ways permissions get added to your project.

  1. They are specified in an Android Manifest file.
  2. They are specified in library (a .aar file).
  3. Unity adds the permission when you use a certain feature. (Added)

My examples use command-line tools on a Mac. I don't know Windows equivalents, but it is possible to find and run unix tools there (using the linux subsystem for windows 10, cygwin, custom binaries, etc.)

1. Find all permissions used in (uncompressed) Android Manifests.

cd /path/to/my/project/Assets grep -r "uses-permission" --include "AndroidManifest.xml" .

This will find all files named AndroidManifest in the current folder (.) or any of its subfolders (-rtells it to search recursively) and spit out any line with the words 'uses-permission'.

In my current project, I get output something like this:

./Plugins/Android/AndroidManifest.xml: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> ./Plugins/Android/AndroidManifest.xml: <uses-permission android:name="android.permission.INTERNET" /> ./Plugins/Android/AndroidManifest.xml: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ./Plugins/Android/AndroidManifest.xml: <uses-permission ./Plugins/Android/IronSource/AndroidManifest.xml: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> ./Plugins/Android/IronSource/AndroidManifest.xml: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2. Find the permissions required in Android Libraries

Your project likely contains android libraries (.aar files) and java archives (.jar files). Some android libraries contain an android manifest and specify permissions needed to use the library. (I don't think .jar files actually do this, but .aar files absolutely do). Both .aar and .jar files are .zip files, with a different extension and with specific metadata in specific places.

Find them by running:

find . -iname "*.?ar" -print -exec zipgrep "uses-permission" "{}" "AndroidManifest.xml" ";" 2> /dev/null

Here's what this does. It finds any file (in the current folder (.) and its subfolders) has an extension of (something) a r, thus .jar, or .aar (-name "*.?ar"). It outputs the archive's file name (-print). It then runs zipgrep (-exec). Zipgrep is told to search through any files in the archive ({}) named "AndroidManifest.xml", and output any line with the words "uses-permission". We then pipe the errors to the bit bucket (2> /dev/null) so we don't see lots of errors about archives that don't have android manifests in them.

An example output looks like this:

./OneSignal/Platforms/Android/onesignal-unity.aar AndroidManifest.xml: <uses-permission android:name="android.permission.INTERNET" /> AndroidManifest.xml: <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> AndroidManifest.xml: <uses-permission android:name="android.permission.WAKE_LOCK" /> AndroidManifest.xml: <uses-permission android:name="android.permission.VIBRATE" /> ... ./Plugins/Android/android.arch.core.common-1.1.0.jar ./Plugins/Android/android.arch.core.runtime-1.1.0.aar ./Plugins/Android/android.arch.lifecycle.common-1.1.0.jar ... ./Plugins/Android/com.google.android.gms.play-services-gcm-11.8.0.aar AndroidManifest.xml: <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> AndroidManifest.xml: <uses-permission android:name="android.permission.INTERNET" /> ./Plugins/Android/com.google.android.gms.play-services-gcm-license-11.8.0.aar ./Plugins/Android/com.google.android.gms.play-services-iid-11.8.0.aar AndroidManifest.xml: <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> AndroidManifest.xml: <uses-permission android:name="android.permission.INTERNET" /> ./Plugins/Android/com.google.android.gms.play-services-iid-license-11.8.0.aar ...

The filenames all start with periods. I can thus see, for example, that the onesignal-unity.aar sets several permissions, several .jar files were searched with no permissions inside them, and some of the play services libraries specify permissions.

If I needed to change a library, I could rename the .aar to .zip, extract it, edit it, compress it, and rename it back. (It isn't necessarily wise to change the permissions inside a library, but possible.)

3. Unity Adds the Permission

I didn't have anything to add on this; as said above, if you use the Microphone API, Unity will add a permission for you so your app will work.

However, I've since realized that you can do the following:

  • bring up the Build Settings for Android
  • tick the 'Export Project' box
  • Export the project, noting the location
  • go to /my/project/export/src/main/AndroidManifest.xml. This is what Unity emits for the android manifest (before google's tools do all the merging).
  • compare it (using your favourite diff tool) to Assets/plugins/Android/AndroidManifest.xml; the differences come from Unity.

 

[출처]

https://stackoverflow.com/questions/40931058/how-to-find-source-of-a-permission-in-unity-android

 

How to find source of a permission in Unity Android

Note: This question is specific to Unity3D I have a very clean android manifest file in Unity project under Plugins/Android/ folder with no tag at all. I believe that some

stackoverflow.com

 

Posted by blueasa

댓글을 달아 주세요

[링크]

https://mentum.tistory.com/150

 

유니티 퍼미션 체크 적용기. (Unity Permission Check)

2019.02.12 다른방식으로 포스트 재 작성 [주의] OBB를 사용하는 Split 빌드의 경우 반드시 저장소 권한을 획득해야함. [주의] 유니티 2018.3 부터 퍼미션체크가 내장되었습니다. 2018.3부터는 플러그인 필요없습..

mentum.tistory.com

 

Posted by blueasa

댓글을 달아 주세요

  1. 2019.09.05 20:56 신고 배고픈멍멍이  댓글주소  수정/삭제  댓글쓰기

    매번 좋은글 감사합니다~ 궁금한게 있어서 댓글남겨봅니다.
    유니티 - c#에서 퍼미션을 주려면 manifast.xml파일을 만들어서 접근하는것밖에 없나요?
    온리 유니티로 네이티브코드 손안대고 만들려고 했는데, 핸드폰 내 최상단 경로에 파일을 쓰려면 접근권한이 필요한것 같아서요 ㅠㅠ
    c#에서 제어가 가능하면 ios나 android로 빌드해서 사용이 가능하지 않을까 하는데,,, 시스템을 이해하지 못해서 헛돌고 있네요ㅜ

    되지 않을까? 라고 생각은 하는데, 할 수 있는것과 할 수 없는것을 구분짓지 못하고 있네요 ㅠ
    너무 멍청한 질문 죄송합니다 ㅜ.ㅜ

    • 2019.09.30 13:39 신고 blueasa  댓글주소  수정/삭제

      안녕하세요.
      안드로이드 기준 manifest라면 유니티에서 직접 수정하셔도 되긴 할텐데요.
      정확히 뭘 원하시는건지 잘 이해를 못해서 답변해드리기가 애매하긴 한데요.
      이해한 대로만 적자면..

      ios는 PostProcessBuild를 이용해서 XCode 셋팅등을 수정할 수 있습니다.(https://blueasa.tistory.com/2190)

      android는 위에도 적었지만 퍼미션이 필요하면 유니티에 있는andriodmanifest.xml 파일에 원하는 퍼미션을 추가하시면 됩니다.