C# 문법
컴포넌트 직접 구현
컴포넌트는 C#을 이용해서 구현한다.
1. C# 변수 선언
//type //정수 int age = 24; //부동 소수는 항상 뒤에 f를 붙여준다 float height = 176.8f; string myName = "상준";
2. C# 변수 계산
//사칙연산 + - * / int a = 1; a++; string a = "My"; string b = "Name"; a + b; //MyName
3. C# script 만들기
3-1.스크립트 생성
1. 프로젝트 창에서 우클릭
2. Create -> C# script
3-2.스크립트 내용
//유니티 콘솔창에 메세지 띄우기 //단 대소문자 구분 잘하자 Debug.Log(); //유니티 전용 Console.WriteLine(); //C# 전용
4. C# 클래스와 메소드
기본 메소드
다음 메소드가 바로 C에서 main에 해당하는 메소드다
실질적으로 모든 메소드는 다음 메소드 내부에 있어야 작동된다.
void Start(){} //스타트 메소드 void Update(){} //스타트 메소드
컨벤션
메소드는 첫글자 대문자 변수는 카멜 표기
추가 메소드
void Start(){} //스타트 메소드 void Update(){} //스타트 메소드 void TestMethod(){} //이 메소드는 자동시작이 되지 않는다 //따라서 main 메소드에 넣어줘야한다
5. C# 멤버변수 지역변수
- 멤버변수
- 메소드 바깥에 선언
- 지역변수
- 메소드 내부에 선언
6. Transform API
https://docs.unity3d.com/kr/530/ScriptReference/Transform.html
씬의 모든 오브젝트는 트랜스폼을 가집니다
오브젝트의 위치, 회전 그리고 스케일을 저장하고 다루기 위해서 사용합니다.
transform.position.x; transform.position.y; transform.position.z;
7. if else 조건문 & bool
유니티에서 공이 특정 높이가 넘어갈때
특정 메세지를 출력하게하자`
public class BallPosition_print : MonoBehaviour { float startPos; float curPos; // Start is called before the first frame update void Start() { startPos = gameObject.transform.position.y; } bool overTheLine = true; // Update is called once per frame void Update() { curPos = gameObject.transform.position.y; //높이가 3보다 작아지면 오버더 라인 출력 if(((startPos - curPos) >= 3.0f) && overTheLine){ overTheLine = false; Debug.Log("overTheLine" + (startPos - curPos)); } } }
C# 장애물 만들기
8. 장애물 만들기
transform.position의 자료형
transform.position = new Vector(a,b,c);
형변환에 주의하자
void Update() { if(cylPos < -1.5f){ cylSpeed = (0-cylSpeed); } else if(cylPos > 1.5f){ cylSpeed = -cylSpeed; } this.transform.position = new Vector3(-1,0,(float) (cylPos+=cylSpeed)); }
의문점
void Update() { if(cylPos < -1.5f){ cylPos += cylSpeed); } else if(cylPos > 1.5f){ cylPos -= cylSpeed; } this.transform.position = new Vector3(-1,0,(float) (cylPos)); }
주의점
위의 화살표는 Move 툴의 (기즈모)Gizmo라고 한다.
다음것들은 서로 다른것이다
Gizmo != transform.position._
자주 쓰이는 클래스와 매서드
9. GetComponent
스크립트에서 컴포넌트는 어떻게 사용하나?
script : 코드 파일
컴포넌트 : 인스펙터 창에서 오브젝트의 상태, 정체성을 나타내주는 것 이라생각
코드에서 만약 이 콜라이더가
RigidBody가 중력이 있는지 없는지 확인하고 싶다.
GetComponent 문법
1. Rigidbody
//클래스 ___=GetComponent<클래스>().클래스멤버;
//GetComponent의 경우 컴포넌트로 접근을 하여 값을 받아옵니다.
//단, 전역에는 선언이 안된다.. 이건 C#에 대해 더 연구해야한다.
//꼭 스타트 영역에서 선언?
Rigidbody myRigid; // Start is called before the first frame update void Start() { myRigid = gameObject.GetComponent<Rigidbody>(); Debug.Log("is Using Gravity" + myRigid.useGravity); }
다음과 같은 결과를 얻는다.
2. SphereCollider
//점차 공의 물리 범위가 커지는것 SphereCollider myColliderRadius; // Start is called before the first frame update void Start() { myColliderRadius = gameObject.GetComponent<SpherCollider>(); myColliderRadius.radius += 0.05; }
10. GameObject
GameObject 클래스는 씬 내에 존재할 수 있는 모든 요소를 나타내는 데 사용됩니다.
역할
GameObject class
1.게임오브젝트 선택, 탐색
- 선택 : player = GameObject.Find("MainHeroCharacter");
- 삭제 : Destroy(this) //“this”는 게임 오브젝트 아님
- 오브젝트 활성화
- GameObject.SetActive(bool)
- 오브젝트 정적,동적
- 태그와 레이어
- 태그 : Tag는 개체 찾을때 사용.
- 게임 오브젝트 에 할당할 수 있는 레퍼런스 단어입니다
- 캐릭터에 “Player”를, 플레이어가 조작하지 않는 캐릭터에 “Enemy” 태그를 붙일 수 있습니다.
- 태그는 콜라이더 조작 스크립트 트리거에 유용합니다.
예를 들어 플레이어가 적, 사물 또는 수집품과 상호 작용하는지 판단해야 합니다.
- 레이어 : 게임 오브젝트,텍스쳐를 번들로 묶는 그룹
- 랜더링 순서를 컨트롤
- 충돌 여부설정 가능 layer Collision Matrix
- 태그 : Tag는 개체 찾을때 사용.
- 컴포넌트 추가 삭제
- Rigidbody rb = GetComponent<Rigidbody>();
- 다른 게임 오브젝트의 컴포넌트 액세스 인스펙터 표시
- public GameObject ___;
카메라가 특정 오브젝트를 따라가게 해보자
Part1
GameObject ___= GameObject.Find("_게임오브젝트"); void Update() { gameObject.transform.position = new Vector3( 0, ball.transform.position.y + 3 , ball.transform.position.z - 14 ); }
Part2
GameObject ball; // Start is called before the first frame update void Start() { ball = GameObject.Find("Ball"); transform.rotation = Quaternion.Euler(new Vector3(30f, -30f, 0.0f)); } // Update is called once per frame void Update() { transform.position = new Vector3( ball.transform.position.x + (5 * Mathf.Cos(Mathf.PI/6 * 5) * Mathf.Sin(-Mathf.PI/6)), ball.transform.position.y + 5 * (Mathf.Sin(Mathf.PI/6 * 5)), ball.transform.position.z + 5 * (Mathf.Cos(Mathf.PI/6 * 5)) + (Mathf.Cos(Mathf.PI/6 * 5) * Mathf.Cos(-Mathf.PI/6)) ); }
자주쓰이는 클래스 메서드 2 & 밤낮 표현하기
11. Transform
트랜스폼(Transform) 은 게임 오브젝트의 포지션, 회전, 스케일, 부모-자식 상태를 저장
부모 자식관계
어떤 게임 오브젝트가 다른 게임 오브젝트의 부모 일 경우,
그 자식 게임 오브젝트는 부모 오브젝트가 이동, 회전, 스케일할 때 정확히 동일하게 동작합니다.
부모-자식 관계는 사람의 몸과 팔 사이의 관계와 비슷하다고 볼 수 있습니다.
다음은 부모-자식
12. Vector와 Quaternion
벡터와 오일러 각에 대해 공부해야할듯
Vector3
13. Gizmos 및 Handles
Gizmos 및 Handles 클래스를 사용하면 씬 뷰와 게임 뷰에 라인과 모양뿐만 아니라 인터랙티브 핸들과 컨트롤도 그릴 수 있습니다.
이 기즈모는 플레이어를 보거나 플레이어의 소리를 들을 수 있는 영역을 나타낼수 있음
14. Time
유니티로 부터 시간 정보를 받을 때 사용하는 인터페이스를 나타냅니다.
1. Time.captureFramerate
디스플레이되는 최대 호출 간격 즉, 프레임을 변경시킬수 있음
2. Time.deltaTime
매 프레임마다 어떤 값을 더하거나 빼는 계산을 하는 경우에, Time.deltaTime과 곱해서 사용할 수 있습니다.
// 초당 10미터 음직이고 싶은 경우 void Update() { float translation = Time.deltaTime * 10; transform.Translate(0, 0, translation); }
초당 태양이 음직이게 해보자
public float inputSpeed; void Update() { transform.Rotate(Vector3.right, (inputSpeed) * Time.deltaTime); }
3. Time.realtimeSinceStartup
게임이 시작된 시간으로부터 경과한 실제 시간을 나타내며, 단위는 초를 사용합니다. (읽기전용)
4. Time.time
선언된 시점에서 카운트가 시작된다.
'게임 > 개발' 카테고리의 다른 글
|유니티| 5 | GameManager을 통한 전역 처리 & 점수표 UI & 발사체 & 클래스와 상속 (0) | 2022.02.06 |
---|---|
|유니티| 4 | 충돌 감지 & 아이템과 배열 (0) | 2022.02.06 |
|유니티| 3 | 유저 입력 & 오브젝트 말풍선(텍스트) 띄우기 & 카메라와 마주보는 스프라이트 (0) | 2022.02.02 |
|유니티| 1 | 유니티 UI & 물리 적용시키기 & Rigid-Body & Bouncy (0) | 2022.01.25 |
[cocos2d-x - 설치] cocos --version syntaxWarning 오류; 해결책은-python 2, 3 같이 사용하기! (4) | 2021.08.09 |