일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 | 31 |
- class
- flash builder
- Android
- Game
- 아이튠즈
- iphone
- Mac
- path
- AS3
- texture
- Build
- 영어
- smartfoxserver
- 배열
- unity3D
- XML
- ios
- swf
- Flash
- 태그를 입력해 주세요.
- 3d
- file
- 경로
- unity
- builder
- AIR
- Ane
- sdk
- 게임
- 단축키
- Today
- Total
목록개발관련(Development)/유니티3D(Unity3D) (52)
상상 너머 그 무언가...
본인은 유니티를 하기 전에 플래시 개발자였다. 플래시에서는 상속을 사용하는 클래스에서 부모객채의 메소드를 호출하러면 super라는 접근자를 사용하면 되던데 유니티에서는 뭐로 접근해야 하는지 몰라 검색을 해봤더니 c#에서는 base 라고 사용하면 되는거 같다. CharAni 라는 클래스를 상속받고 있는 PhyBossAni 라는 클래스가 있다. PhyBossAni 라는 클래스에서 부모클래스의 메소드를 실행하고자 한다면... base.메소드명() ex) base.test(); 위와 같이 적어주면 된다. 자식 클래스의 test메소드에서 부모 클래스의 test 메소드를 실행해주면 상속받은 클래스의 기능을 확장해서 쓸 수 있다.
WaitForSeconds라는 메소드가 있는데 C#에서 쓰러면 조금 까다롭게 형식에 맞춰서 작성해줘야 한다. 위 예제와 같이 Awake라는 메소드에서 시간을 두번 출력할때 첫번째 시간을 출력 한 뒤 5초뒤에 두번째 시간을 출력하고자 하는경우 또는 일정시간마다 반복 재귀호출 되는 메소드를 작성하고 싶을때에 'IEnumerator' 라는 인터페이스를 사용하도록 해당 메소드 앞에 적어줘야 한다. IEnumerator delayTime() { yield return new WaitForSeconds(1); Debug.Log("time = " + Time.time ); } 위와 같이 delayTime이라는 메소드를 적어주면 메소드가 호출되면 1를 기다렸다가 1초뒤에 Debug 문장이 실행된다. IEnumerato..
for (var emitter in childEmitters) { // turn them on or off emitter.emit = on; } 위와 같은 자바스크립트로 작성된 for in 문을 C#에서 동일하게 동작하도록 하러면 foreach (ParticleEmitter emitter in childEmitters) { // turn them on or off emitter.emit = on; } 위와 같이 foreach문을 사용하면 된다.
특정 gameObject와 그 자식 gameObject들이 가지고 있는 특정 컴포넌트들을 한군데에 모아 동시에 제어가 가능하다. GetComponentsInChildren 메소드가 바로 그것이다. 아래 이미지에서 보면 Cube에는 이름이 같은 많은 Capsule 자식(Children)이 있다. 각각 캡슐에는 Collider가 포함되어 있는데 이 많은 자식들의 Collider를 Tirigger 상태로 바꾸러면 자식들의 갯수만큼 반복해서 스크립트를 작성해야 하지만 GetComponentsInChildren 메소드를 사용하면 갯수가 몇개든 쫙~ 찾아서 하나에 담아준다. public Collider[] colliders; // Use this for initialization void Start () { col..
javaScript에서는 @script RequireComponent(컴포넌트이름) C# 에서는 [RequireComponent (typeof(컴포넌트이름))] java의 경우 컴포넌트 이름만 넣어주면 알아서 붙여주지만 C#에서는 typeof() 메소드를 이용해서 리턴된 타입값을 가지고 해당 컴포넌트를 추가로 붙여준다. 테스트 삼아 Cube 게임 오브젝트에 자동으로 rigidBody를 붙여주도록 하는 'requireComponent' 스크립트를 적용시켜보았다. 결과는 아래 이미지에서 처럼 따로 rigidBody를 추가하지 않았는데도 스크립트에서 요청한 문장이 실행되어 자동으로 rigidBody 컴포넌트가 추가되어 있는걸 확인 할 수 있다. requireComponent.cs 파일은 아래와 같이 [Requ..
특정 gameObject에서 해당 게임오브젝트에 포함되어 있는 내부 게임오브젝트들을 해제하는 스크립트는 검색을 좀 해보면 transform.DetachChildren();위와 같이 DetachChildren이라는 메소드가 있다는걸 알 수 있는데 반대로 특정 게임오브젝트안에 다른 게임오브젝트를 포함하게 하러면 어떻게 해야 할까? 플래시 액션스크립트에서의 addChild 같은 메소드가 있을거라 생각했지만 정답은 생각외로 가까운데에 있었다. transform.parent = GameObject.Find("spinPlane").transform;위와 같은 문장을 특정 게임오브젝트 안에 포함되려는 해당 게임 오브젝트의 스크립트에 작성해주면 된다. 의례 parent 속성은 읽기 전용일꺼라 생각이 들었는데 ( 플래시..
캡쳐스크린샷 함수를 이용해서 게임 플레이 화면을 캡쳐할때 절대경로를 지정해주면 저장하고 다시 로드할때 경로가 틀려지는걸 막을 수 있어 좋다. 하지만 절대경로는 해당 경로의 폴더가 없거나 하는 경우... 가령 C:\\temp 폴더에 이미지를 저장한다고 했을때 사용자의 컴퓨터가 메인드라이브 이름이 C가 아닌 D나 E로 바꾸어져있는 가능성도 있다. 이럴 경우 저장할 경로가 없기 때문에 오류가 나게 되는것이다. 맥북의 경우도 드라이브명이 C나 D 형식이 아니지 않는가? 유니티 프로그램이 아이폰이나 안드로이드폰에서 실행된다면? C드라이브가 없는건 당연할것이다. (있을수도 있겠지만...) 나는 개인적으로 절대경로를 싫어하고 상대경로를 선호한다. 어느 플렛폼에서나 오류없이 돌아가게 프로그래밍 하는것을 추구한다. 여튼..
유니티 작업중에 GUI 부분 작업을 하고있는데 이상하게 임포트한 이미지 퀄리티가 안좋게 보여졌다. 유니티에서 임포트 하면서 이미지 파일의 퀄리티를 떨어트려서 가져와서 그런가 보다 했는데 이미지 파일의 텍스쳐 width, height 크기에 맞춰 무언가 동작하도록 스크립트를 짜는데 내가 생각한것과 다른 결과가 나왔다. 확인을 해보니 texture의 가로세로 크기가 실지 이미지파일의 가로세로 크기가 아닌게 아닌가???? 퀄리티 낮춰서 들어오는건가보다 했던 착각을 넘어 이건 도무지 납득이 가질 않았다. 확인을 해보니 TextureImporter에는 Texture Type 항목이 다음과 같이 여러가지가 있었다. 기본적으로 임포트 되는 방식인 Texture, Normal map, GUI, Reflection, C..
rigidbody.freezeRotation = true; 위와 같이 적어주면 rigidbody 에 회전 움직임에 대해서는 물리적용이 안받게 된다. 예를 들어 지면에 붙어 있는 box는 회전값이 물리적용 받게되면 x축으로 회전이 되지 않지만 물리적용에 회전값을 고정시키면 지면에 붙어있어도 x축으로 회전이 가능하다. 지면에 있는 box는 밑면이 바닥과 붙어있기 때문에 자전을 할 수 없는데 (회전하러면 90도 굴러야 한다, 좌표값도 바뀐다 ) freezeRotation 값을 true로 주게되면 지면에 붙어있어도 중심축을 기준으로 회전이 가능하다
static function Clamp (value : float, min : float, max : float) : float Description Clamps a value between a minimum float and maximum float value. 어떤 캐릭터의 목 회전값이 최소 -85, 최대 85 각도까지만 회전이 되게끔 하고 싶은데 입력되는 회전값이 -360 부터 360 까지 입력된다면? neckRotation = Mathf.Clamp( InputAngle, -85, 85 );
OpneNI 관련된 unity sample 스크립트를 분석 중에 다음과 같은 스크립트를 보게 되었다. Debug.Log(String.Format("[{0}] New user", UserId)); C# 레퍼런스를 찾아보니 콤마 뒤에 있는 UserId 변수에 있는 값이 {0} 위치에 대입되는 기능이였다. 대입시킬 값이 두개 이상이면 {1}, {2}... 이런식으로 index 숫자를 한개식 증가시켜 입력해주면 된다. ("{0} {1}", "Decimal", "Hex") 뒤에오는 매개변수에 매칭되는 { } 문장은 단순 index값 뿐만이 아니라 옵션이 두가지 더 있다. {index[,length][:formatString]} 한글로 옮겨 적자면 ==> {인텍스,길이:스트링포멧} 예제를 보자 String.Form..
유니티 관련 블로그에 보면 코드네임 Molehill 이라는 플래시 플레이어에 하드웨어 3D를 지원한다는 내용과 함께 대부분이 다 미정이지만 만약 한다면 두가지 방향으로 진행될거 같다고 하네요 플래시툴 배경에서 유니티의 GameObject 클래스를 사용하는것과 유니티툴 배경에서 유니티가 자동으로 액션스크립트로 변환해서 퍼블리싱해주는것 뭐 뭐든간에 개발하는 사람 입장에서는 환영할 이야기다.