반응형

프로그래밍 정리/Unity 48

[유니티][Unity] 셰이더 스크립트에서 변경 후 되지 않는 이유

Unity5부터 추가된 Standard 쉐이더에는 4가지 렌더모드가 존재합니다. Opaque, Cutout, Fade, Transparent 입니다. 이 쉐이더 모드를 스크립트에서 전환할 수 있습니다. mat.SetFloat("_Mode", 2); 그런데 모드를 전환해도 쉐이더 속성은 변하지 않습니다. 이유는 저도 잘 모르겠네요. 5.2.2f1 기준입니다. 그래서 각종 속성을 직접 바꿔줘야 합니다. public static void SetupMaterialWithBlendMode(Material material, BlendMode blendMode){switch (blendMode){case BlendMode.Opaque:material.SetInt("_SrcBlend", (int)UnityEngine...

[Unity - 유니티] 전처리기(Preprocessor)

전처리를 화용하여 플랫폼에 맞게 스크립트를 처리할 수 있음. #if UNITY_EDITOR(유니티 에디터 상태에서만 동작하는 스크립트)#elif UNITY_IPHONE(빌드 타겟이 아이폰일 때 동작하는 스크립트)#elif UNITY_ANDROID(빌드 타겟이 안드로이드일 때 동작하는 스크립트)#endif #define 지시어를 통해 선택적으로 스크립트를 실행할 수도 있음. ex)#define CBT//#define OBT using UnityEngine;using System.Collections; public class GM : MonoBehavior{#if CBTprivate int hp = 10;#elif OBJTprivate int hp = 100;#endif void PlayerDamage(){..

[Unity - 유니티] Touch 구조체

Touch 구조체 변수명 설명 deltaPosition 마지막 위치로부터 움직인 위치 변위 값 deltaTime 마지막 변경 이후부터 경과된 시간 fingerId 손가락의 고유 인덱스(터치별로 고유 값이 설정됨) phase 터치의 유형(터치 시작, 종료, 취소, 오래 누르기) position 터치의 좌표(픽셀 단위) tapCount 탭의 수 Input.touches- Touch 구조체 배열을 반환함- 한번에 여러 개의 손가락 터치를 처리하기 위해서 배열로 넘어옴.- 스크린 한번의 터치를 발생시키면 Input.touches[0]으로 첫 번째 터치 정보를 알 수 있음. Input.touchCount- 터치의 개수를 반환함.- 0 보다 크다는 것은 터치를 한 번 이상 했다는 뜻.- Input.GetTouch(..

[Unity - 유니티] 스크린 터치(Screen Touch) - ScreenPointToRay 함수

모바일 스크린 터치 모바일 스크린에서 터치한 좌표는 2차원 좌표임.2차원 좌표를 3차원 좌표로 변화시켜 특정 오브젝트를 검출하는 방법으로ScreenPointToRay 함수가 있음. 모바일 스크린테 터치한 좌표는 Screen Point 좌표로 2차원 좌표임.이 좌표를 3차원에 투영하고 메인 카메라에서 투영된 3차원 좌표로Ray를 발사함. Ray를 통해 Raycast 함수를 사용하여 광선에 맞은 객체를 알아낼 수 있음. DrawRay(Vector3 start, Vector3 dir, Color color) 함수를 통해Ray를 확인할 수 있음. ScreenPointToRay ScreenPointToRay 함수는 Camera 클래스의 함수.스크린 좌표를 인수로 넘겨주면 카메라에서 시작하여스크린 좌표에 해당하는 ..

[Unity - 유니티] 래그돌(Ragdoll) - Rigidbody - isKinematic(래그돌 활성, 비활성화)

래그돌의 활성, 비활성화를 결정하는 것이라고 볼 수 있는Rigidbody 컴포넌트의 isKinematic 옵션. isKinematic 옵션이 true일 경우- Rigidbody 컴포넌트가 추가된 게임오브젝트가 물리시뮬레이션을 통해 이동하지 않고Transform 컴포넌트의 속성에 의해 이동함. - 애니메이션을 실행하고 있을 때는 각 관절이 애니메이션의 의해움직이고 있기 때문에 물리엔진의 연산작업이 의미가 없음. - isKinematic 옵션이 true일 경우 물리엔진의 영향을 받지 않음. - 래그돌을 활성화 하기 위해서는 반드시애니메이션은 반드시 정지시켜야함.=================================================================ex)// 애니메이션 정지anim..

[Unity - 유니티] 래그돌(Ragdoll) - Create Ragdoll, Character Joint

래그돌(Ragdoll)- 래그돌은 말그대로 "헝겁인형"을 의미. - FPS 또는 TPS 게임에서 총격 중 사망했을 때 "헝겁인형처럼 죽는다"라고 해서 붙여진 이름. - 캐릭터가 사망했을 때 미리 정의된 애니메이션을 실행하는 것이 아닌자연스럽게 주저 앉거나 쓰러지는 효과를 연출할때 쓰는 방법. - 래그돌은 3D 모델을 Scene뷰에 가져와 메뉴의 "GameObject -> Create Others -> Ragdoll"을 선택해 "Create Ragdoll"창을 통해서 만들 수 있음. - "Create Ragdoll" 창에서 본(Bone)을 하나씩 연결해서 만들어야함. - "Create Ragdoll" 창에서 연결한 본 맵핑(Bone Mapping) 정보를 토대로 각 관절 단위로 Capsule Collide..

[Unity - 유니티] Network 접속 종료처리

어떤 플레이어가 접속되거나 접속이 끊어지면 호출(콜백 함수)MonoBehavior의 Override 콜백함수. - Network.OnPlayerConnected(NetworkPlayer) - 플레이어 접속시 발생- Netrowk.OnplayerDisconnected(NetworkPlayer) - 플레이어 접속 종료시 발생. ===================================================================================ex) public class TestNet : MonoBehavior{ // 접속이 종료된 플레이어의 네트워크 객체를 모두 소멸처리void OnPlayerDisconnected(NetworkPlayer netPlayer){// 네트워크 ..

반응형