코드의 기본! 문장 끝에 ; 을 붙인다.
변수
1. 변수 형태
타입 변수명;
2. = : 대입연산자
오른쪽에 있는 값을 왼쪽에 전달한다는 의미.
coin이라는 변수에 1000이라는 수를 저장한다.
int coin = 1000;
이후에 값을 변경할 수 있다.
int coin = 1000;
coin = coin + 1000; // 적을 쓰러뜨리고 코인을 얻는다.
coin = coin - 500; // 아이템을 구매해서 코인이 차감된다.
3. 변수 선언하기
// 방법1
int coin; // coin이라는 이름의 int 타입의 변수를 선언한다.
coin = 1000; // 변수에 값을 할당한다.
// 방법2
int coin = 1000; // 선언과 동시에 값을 할당한다.
int는 정수 integer의 약자입니다.
4. 타입
int : 정수를 저장하는 타입
float : 실수를 저장하는 타입. floating
bool : 참(true) / 거짓(false)를 저장하는 타입
stirng : 문자열을 저장하는 타입
int coin = 1000;
float PlayerHp = 100.55f;
bool isDead = true;
string EnemyName = "Monster";
2. 함수
1. 개념
코드 묶음. 반복해서 사용하는 것을 함수로 묶어둠으로서 클린 코드 작성!
예를들어, 적을 때릴 때 적의 체력을 플레이어의 공격력만큼 닳는다고 하자.
플레이어
{
공격력 : 10
}
몬스터1
{
체력을 10만큼 감소
뒤로 물러나는 애니메이션 재생
효과음 재생
몬스터1의 애니메이션 재생
}
몬스터2
{
체력을 10만큼 감소
뒤로 물러나는 애니메이션 재생
효과음 재생
몬스터2의 애니메이션 재생
}
만약 플레이어가 레벨업을 해서 공격력이 증가한다면?
서로다른 몬스터가 100개라면?
반복되는 코드를 묶어준다.
플레이어
{
공격력 : 10
}
void Attack()
{
체력을 10만큼 감소
뒤로 물러나는 애니메이션 재생
효과음 재생
}
몬스터1
{
Attack();
몬스터1의 애니메이션 재생
}
몬스터2
{
Attack();
몬스터2의 애니메이션 재생
}
2. 함수의 입력
여기서 플레이어의 공격력도 계속 바뀔 수 있기 때문에 Attack 함수도 아직 중복이 있습니다.
Attack( )에서 괄호 부분은 이 함수 바깥에서 값을 줄 수 있는 부분입니다.
괄호 안에 받을 값들을 넣어줍시다.
추가로 공격했을 때 적을 뒤로 물러나게 하는 기능도 넣어보겠습니다.
플레이어
{
공격력 : 10
}
void Attack(int PlayerAttack, int EnemyDistance)
{
체력을 PlayerAttack 만큼 감소
적을 EnemyDistance 만큼 뒤로 물러나게 함
뒤로 물러나는 애니메이션 재생
효과음 재생
}
그럼 함수를 사용하는 부분에서 int PlayerAttack과 int EnemyDistance 부분을 채워줘야 합니다.
몬스터1
{
Attack(10, 5);
몬스터1의 애니메이션 재생
}
몬스터2
{
Attack(5, 3);
몬스터2의 애니메이션 재생
}
몬스터1에서 Attack 함수로 10과 5라는 값을 전달하게 되고
몬스터2에서 Attack 함수로 5과 3이라는 값을 전달하게 됩니다.
3. 함수의 반환값
Attack 함수는 결과를 전달하는 값은 없습니다.
하지만, 만약 적과 플레이어 거리를 계산하여 어느정도 가까워지면 적이 공격을 시작한다는 문장을 생각해봅시다.
적과 플레이어 거리를 계산하여 어느정도 가까워지면 적이 공격을 시작한다
수백개의 몬스터들이 "적과 플레이어 거리를 계산한다"는 문장을 사용한다고 할 때 우리는 함수를 사용하는게 편하겠다! 라는 생각을 하게 됩니다.
앞의 Attack 함수를 보면 Attack 함수 안에서의 값을 외부에서는 사용할 수 없습니다.
우리는 함수 안의 값을 쓰기 위해서 return 키워드를 사용해서 값을 외부로 전달합니다.
void CountDistance (int Player, int Enemy)
{
int distance;
// Player와 Enemy의 거리계산
return distance; // 계산한 결과를 반환한다.
}
1. CountDistance 함수를 실행한다.
2. 함수 내분의 코드를 실행한다.
3. 함수 안의 내용이 종료되면 함수를 호출한 곳으로 돌아가서 return 값을 전달한다.
컴퓨터는 리턴 값의 타입을 혼자 알아내지 못합니다.
그래서 우리는 함수 이름 앞에 타입 이름을 적어주어야 합니다.
void는 함수로 치면 공집합으로 반환 값이 없다는 의미입니다.
반환값을 고쳐주어야 합니다.
int CountDistance (int Player, int Enemy)
{
int distance;
// Player와 Enemy의 거리계산
return distance; // 계산한 결과를 반환한다.
}
흐름 이해
int CountDistance (Player, Enemy)
{
int distance;
// Player와 Enemy의 거리계산
return distance; // 계산한 결과를 반환한다.
}
void Monster1()
{
int distance;
distance = CountDistance(player, monster1);
}
+) 모든 함수는 return이 있어야 하지만 void 함수는 리턴 값이 없어도 된다..
스크립트 살펴보기
1. 구성
- using
- class
- Start( )
- using: 미리 제공되는 기능 들여오기
using System.Collections;
using System.Collections.Generic;
using UnityEngine; // UnityEngine 네임 스페이스에 존재하는 코드를 가져와서 사용함.
Debug에 마우스를 가져다가 기다리면...
class UnityEngine.Debug라고 뜬다.
Debug의 전체 이름은 : UnityEngine.Debug
. 은 함수의 내용을 꺼내 쓰는 것.
UnityEngine.Debug.Log() 은 UnityEngine 에서 Debug 에서 Log를 사용하는 것이다.
- Start() : 코드 실행이 시작되는 시점
public class MyScript : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
}
< 유니티에서 플레이어 정보 출력해보기 >
<메서드 연습하기>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyScript : MonoBehaviour
{
void Start()
{
float distance = GetDistance(2,2,5,6);
Debug.Log("거리는..." + distance + "입니다");
}
void GetDistane(float x1, float x2, float y1, float y2)
{
float width;
float height;
float distance;
// 계산하기
return distance;
}
}
// 루트함수
Mathf.Sqrt()
'Unity' 카테고리의 다른 글
유니티 안드로이드 연결 (0) | 2021.04.28 |
---|---|
C# 기초 (3) 배열, 클래스/오브젝트 (0) | 2021.04.28 |
C#기초 (2) (0) | 2021.04.08 |
[Unity AR] 유니티 증강현실 AR 동영상 앱 만들기 (0) | 2020.09.23 |
[Unity AR] 유니티 증강 현실 3D 개체가 나타나도록 하는 AR 앱 만들기 (1) | 2020.09.22 |