코드네임 :
Class 클래스⭐️ 본문
유니티는 Class 개념이 중요⭐️
~
<Class의 엑세스 한정자> (MS 문서? 참고)
▷ public : 동일한 어셈블리의 다른 코드나 해당 어셈블리를 참조하는 다른 어셈블리의 코드에서 형식이나 멤버에 액세스할 수 있습니다. 형식 공용 멤버의 액세스 수준은 형식 자체의 액세스 수준에 의해 제어됩니다.
https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/public
▷ protected : 같은 class 또는 해당 class에서 파생된 class의 코드에서만 형식 또는 멤버에 액세스할 수 있습니다.
https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/protected
▷ private : 같은 class 또는 struct의 코드에서만 형식 또는 멤버에 액세스할 수 있습니다.
https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/private
C에선 Class 없고 생김새 비슷한 Struct 구조체 잇음 - 근데 Class랑 완전히 다른거임!!!!!
⬇️ struct 구조체
https://andrew0409.tistory.com/150
⬇️ Class (c++)
https://andrew0409.tistory.com/151
Class
: method 와 변수를 모아둔 것
✔︎ 서로 관계가 있는 변수와 method를 하나로 합칠 수 있으므로 스크립트를 관리하기 쉬움
✔︎ Class에서 사용한 변수를 멤버 변수, 사용한 메서드를 멤버 메서드라고 함
Unity에서는 '처리 단위'보다는 '물건 단위'로 스크립트를 작성하는 것이 편리함!
✔︎ 작성한 Class는 int나 string등 데이터 (자료)형으로 사용가능 (Player 클래스를 만들면 Player형으로 사용가능)
▶ int num;을 쓰면 int형의 num변수를 만들 수 있음
→ num 변수의 상자는 비어있음(NULL)
▷ 따라서 그 상자에 2나 1500 같은 숫자를 대입
▶ Player myPlayer;을 쓰면 Player형의 myPlayer 변수를 만들 수 있음
→ myPlayer 변수의 상자는 비어있음(NULL)
▷ 따라서 그 상자에 myPlayer 변수에는 플레이어의 실체 (인스턴스) 를 대입
. 의 사용
✔︎ myPlayer 변수가 가진 멤버 method나 멤버 변수를 사용하려면 myPlayer.멤버 method명(or 멤버 변수명)을 씀
→ 반드시 . 을 사용할 것!
▷ 멤버 method나 변수 앞에 Public이라는 키워드 있어야 한대
✔︎ OO.xx : OO Class가 가지는 xx method(또는 변수) 를 사용(호출)한다는 의미
유니티가 제공하는 클래스 :
Vector 클래스..., Debug 클래스(로그 표시 시)
접근수식자
✔︎ 접근 수식자를 생략하면 private으로 간주 !!
▷ 따라서 공개하고 싶은 변수나 method가 있다면 public 수식자를 붙이는 게 굿
✔︎ public : 외부 클래스에서도 접근 가능 (전부 가능)
✔︎ protected : 외부 클래스는 ❌, 이 클래스를 상속받는 파생 클래스(서브클래스) 에서는 접근 가능
▶ 파생클래스 → class B : A
✔︎ private : 자기꺼만 ㄱㄴ (내부적으로만)
예제
✔︎ 지금까지 써온 Test2.cs에 Player 클래스 추가하기
✔︎ Player 클래스는 Test 클래스 외부(위쪽?)에 추가하는 것에 주의 !
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player // public : 외부 클래스에서 이 클래스를 불러다 쓸 수 있도록
{
private int hp = 100; // private : player 혼자만 쓸 수 있는 변수
private int power = 50; // 앞에 아무것도 안 붙이면 저절로 private 되므로 안붙여도 됨
// int hp = 100;
// int power = 50;
public void Attack() // 외부 클래스에서 불러다 쓸 수 있음
// void : 반환값 X
// () : 인자 값 X
{
Debug.Log("적에게 " + this.power + " 대미지를 입혔다!!"); // this. : Player클래스의 '인스턴스'를 가리킴
// 걍 this.이 붙으면 "아 자기 클래스(Player)에 있는 멤버 변수구나" 라고 생각
// 사실 근데 이 경우 this. 안 붙여도 문제는 안되지만 this.을 붙임으로써
// 전역변수가 아니라 이 클래스의 멤버변수구나 라는 것을
// 확실하게 알 수 있기에 가독성 높임
// power는 정수 + "대미지를 입혔다"는 str = 결과는 str로 형변환
}
public void Damage(int damage) // public : Damage 메소드를 외부클래스(이 경우 Test2)에서 사용 가능
// void : 반환값 X
// (int damage) : 정수형 타입의 인자값 damage
{
this.hp -= damage; // this.hp : Player클래스 안의 hp라고 하는 멤버 변수를 호출
// 얘도 this. 필요없긴 함
// 원래 있던 hp 값에서 damage 만큼 빼주고, 다시 그 값을 hp에 대입
Debug.Log("적에게 "+ damage + " 대미지를 입었다..");
Debug.Log("현재 플레이어의 hp : "+ this.hp);
}
}
public class Test2 : MonoBehaviour
{
private void Start()
{
Player myPlayer = new Player(); // new로 Player의 인스턴스 생성
// 생성된 인스턴스는 myPlayer의 변수에 넣음
myPlayer.Attack(); // Player클래스가 갖고 있는 Attack이란 함수를 호출
myPlayer.Damage(30); // Player클래스가 갖고 있는 Damage란 함수를 호출
// 인자값으로 30을 넣으면서 !!
}
}
/* 실행결과 */
// 적에게 50 대미지를 입혔다!!
// 적에게 30 대미지를 입었다..
// 현재 플레이어의 hp : 70
⬇️ 실행 결과
'프로그래밍 > Unity(C#)' 카테고리의 다른 글
슈팅게임 - #1 플레이어 이동 (0) | 2023.07.04 |
---|---|
Vector Class 벡터 클래스 (0) | 2023.07.03 |
오류코드 영어로 읽기 (0) | 2023.07.03 |
method (사용자 정의 함수) (0) | 2023.07.03 |
Unity랑 다른 VS 연결법 (0) | 2023.07.02 |