[Unity3D] Unity3D 에서 자 바스 크 립 트 의 기본 사용 과 소개

9490 단어
유 니 티 에 서 는 스 크 립 트 가 없어 서 는 안 된다.그 는 당신 게임 의 각종 행동 과 규칙 을 정의 할 것 이기 때 문 입 니 다.
이 강 좌 는 자 바스 크 립 트 의 기본 사용 을 소개 할 것 이다.
1. 목표
유 니 티 에서 스 크 립 트 는 사용자 가 게임 에서 의 행동 이나 규칙 을 정의 하 는 데 사 용 됩 니 다.Unity 가 추천 하 는 프로 그래 밍 언어 는 JavaScript 이 며 C \ # 또는 Boo 도 지원 합 니 다.
2. 전제
이 튜 토리 얼 의 중점 은 유 니 티 스 크 립 트 기반 입 니 다. 전 제 는 유 니 티 의 인터페이스 에 익숙 하 다 는 것 입 니 다.
3. 명명 규범
시작 하기 전에 먼저 Unity 의 규범 을 말씀 드 리 겠 습 니 다.
변수 - 첫 글자 가 소문 자로 되 어 있 습 니 다.변 수 는 게임 상태의 모든 정 보 를 저장 하 는 데 사 용 됩 니 다.
함수 - 첫 글 자 는 대문자 입 니 다.함 수 는 코드 블록 으로 필요 할 때 중복 호출 될 수 있 습 니 다.
류 - 이니셜.함수 라 이브 러 리 로 여 겨 질 수 있 습 니 다.
범례 를 읽 을 때 이니셜 에 주의 하면 대상 간 의 관 계 를 잘 이해 하 는 데 도움 이 될 것 이다.
4. 사용자 입력
우리 의 첫 번 째 예 는 장면 에서 간단 한 이동 을 실현 하 는 것 이다.
1) 필드 설정:
- 유 니 티 를 가동 한다.이동 할 평면 을 만 듭 니 다.GameObject->CreateOther->Plane。또한 Inspector 패 널 에 Position 을 '0, 0, 0' 으로 설정 합 니 다.현재 페이지 에 Inspector 패 널 이 없다 면 Window - > Layouts - > 2by 3 을 선택 하 십시오.개발 수 요 를 위해 각종 구 조 를 숙지 할 것 을 건의 하 다.
- 큐 브 를 만 듭 니 다.GameObject->CreateOther->Cube。Inspector 패 널 에 Position 을 '0, 1, 0' 으로 설정 합 니 다.
- 우 리 는 현실 세계 에서 물체 가 빛 에 의 해 반사 되 는 것 을 알 고 있다. 그러면 우리 에 게 도 빛 이 필요 하 다.GameObject - > CreateOther - > PointLight 를 선택 하 십시오.Inspector 패 널 에 좌 표를 '0, 5, 0' 으로 설정 합 니 다.
- 현재 필드 를 저장 합 니 다.단축 키 는 Ctrl + s 입 니 다.
2) 새 스 크 립 트.
우 리 는 사용자 의 시선 을 움 직 일 계획 이다. 이것 은 메 인 카메라 의 위 치 를 제어 함으로써 이 루어 져 야 한다.우 리 는 스 크 립 트 를 쓴 후에 스 크 립 트 와 카 메 라 를 결합 시 켜 야 한다.
- 빈 스 크 립 트 를 만 듭 니 다.Assets - > Create - > JavaScript 를 "Move" 라 고 명명 합 니 다.단축 키 이름 을 F2 로 변경 합 니 다.
- 스 크 립 트 Move 를 더 블 클릭 하여 엽 니 다.기본 값 은 Update () 함 수 를 포함 합 니 다.우리 의 코드 를 이 함수 에 넣 으 면 그 는 각 프레임 에서 한 번 씩 실행 할 것 이다.
우 리 는 transform 으로 카메라 의 위 치 를 바 꾸 고 Translate 라 는 함 수 를 사용 해 야 한다. 그 는 x, y, z 세 개의 매개 변 수 를 가지 고 있다.우 리 는 다음 코드 를 추가 합 니 다.
function Update(){
    transform.Translate(Input.GetAxis("Horizontal"),0,Input.GetAxis("Vertical"));
}

Input. GetAxis () 함 수 는 - 1 에서 1 사이 의 값 을 되 돌려 줍 니 다. 예 를 들 어 가로축 의 왼쪽 축 은 - 1 에서 0, 오른쪽 축 은 0 에서 1 입 니 다.필요 하 다 면 Edit - > ProjectSettings - > Input 에서 버튼 맵 을 다시 정의 할 수 있 습 니 다.
3) 연결 스 크 립 트
대본 을 다 썼 는데, 어떻게 그 를 작용 하 게 합 니까?우 리 는 대본 을 물체 에 부여 해 야 한다.
- 스 크 립 트 를 적용 하고 자 하 는 물체 대상 을 클릭 합 니 다.여 기 는 우리 에 게 카메라 다.Hierarchy 패 널 에서 선택 하 십시오.
- 메뉴 에서 Components - > Scripts - > Move 를 선택 하면 Inspector 패 널 에서 카메라 에 Move 라 는 구성 요 소 를 추가 하 는 것 을 볼 수 있 습 니 다.(우 리 는 마우스 로 스 크 립 트 를 물체 대상 에 끌 어 올 릴 수도 있다)
실행 을 클릭 하면 우 리 는 카메라 의 이동 을 앞 뒤로 좌우 버튼 으로 제어 할 수 있다.
Delta Time 에 대해 서 주의 하 세 요.
라 는 질문 을 던 졌 다.Update () 함수 에 있 는 코드 는 프레임 에 따라 실 행 됩 니 다.만약 우리 가 물체 의 이동 을 시간 초 에 따라 실행 해 야 한다 면, 우 리 는 Input. GetAxis () 함수 의 반환 값 을 Time. delta Time 에 곱 해 야 한다.
var speed = 5;
function Update(){
var x = Input.GetAxis("Horizontal")*Time.deltaTime*speed;
var y = Input.GetAxis("Vertical")*Time.deltaTime*speed;
transform.Translate(x, y, 0);
}

이렇게 설정 한 후 WASD 를 누 르 면 상하 좌우 의 시각 이동 이 가능 합 니 다.이 곳 의 speed 는 명시 적 변수 로 Inspector 패 널 에서 볼 수 있 습 니 다.우 리 는 사용 중 에 수시로 그것 의 값 을 조정 할 수 있어 서 매우 편리 하 다.
5. 연결 변수
Unity 는 인터페이스 에서 드래그 (drag and drop) 방식 으로 스 크 립 트 를 부여 할 수 있 습 니 다.빠 르 고 편리 하 다.여기 서 우 리 는 연결 변수의 개념 과 관련 될 것 이다.
- 장면 에 스포트라이트 를 추가 합 니 다.GameObject->CreateOther->SpotLight。포지션 은 '0, 5, 0', 로 테 이 션 은 '90, 0, 0' 이다.
- "SpotLight" 라 는 이름 의 JavaScript 스 크 립 트 를 만 듭 니 다.
우 리 는 스포트라이트 를 메 인 카메라 에 비 추 게 하고 싶다.우 리 는 transform. LookAt () 이라는 함 수 를 사용 할 수 있 습 니 다.
이 함 수 를 어떻게 사용 합 니까?우 리 는 명시 적 변 수 를 만들어 야 한다.SporLight 스 크 립 트 에 다음 코드 를 기록 합 니 다:
var target : Transform;
	function Update(){
	transform.LookAt(target);
}

- 스포트라이트 대상 에 게 스 크 립 트 부여.메뉴 표시 줄 Component 에 추가 하거나 마우스 로 끌 어 다 놓 습 니 다.그 후에 'target' 변 수 는 Inspector 패 널 에 나 타 났 습 니 다.
- Hierarchy 패 널 의 메 인 카메라 대상 을 Target 변수 에 끌 어 다 놓 습 니 다.만약 우리 가 스포트라이트 를 다른 물체 에 비 추 게 하고 싶다 면, 우 리 는 다른 물 체 를 끌 어 올 릴 수도 있 고, Transform 유형의 것 만 있 으 면 된다.
- 운행.너 는 스포트라이트 가 줄곧 메 인 카 메 라 를 비 추 는 것 을 볼 수 있다.
6. 액세스 구성 요소
한 게임 대상 에 여러 개의 스 크 립 트 나 다른 구성 요소 가 있 을 수 있 습 니 다.다른 구성 요소 의 함수 나 변 수 를 방문 할 수 밖 에 없습니다.Unity 에서 GetComponent () 함 수 를 통 해 이 목적 을 실현 합 니 다.우 리 는 이제 스페이스 바 를 누 른 후 스포트라이트 가 큐 브 를 비 추 는 것 을 실현 해 야 한다.
우 리 는 이 절 차 를 고려 해 보 자. 1. 스페이스 바 가 눌 리 는 것 을 감시 하 자.2. 스페이스 바 를 눌 렀 을 때 스포트라이트 가 큐 브 를 비춘다.SporLight 스 크 립 트 에 target 변수 가 있 기 때문에 이 변수 에 새로운 값 을 설정 하면 됩 니 다.
- Switch 라 는 스 크 립 트 를 만 들 고 다음 코드 를 추가 합 니 다.
var switchToTarget : Transform;
function Update(){
	if(Input.GetButtonDown("Jump"))
		GetComponent(SpotLight).target = switchToTarget;
}

GetComponent () 의 인 자 를 주의 하 십시오. Switch 스 크 립 트 에 인 자 를 되 돌려 줍 니 다. "target" 변 수 를 사용 할 수 있 습 니 다.
이.
GetComponent 에서 가 져 온 것 은 점 광원 이 아니 라 SpotLight 라 는 JS 파일 입 니 다. -스포트라이트 대상 에 Switch 스 크 립 트 를 추가 하고 Inspector 패 널 의 switch ToTarge 변수 에 큐 브 를 끌 어 다 놓 습 니 다.
- 운행.스페이스 바 를 누 르 면 스포트라이트 가 큐 브 를 비춘다.
 
앞에서 언급 했 듯 이 코드 를 쓰 는 방식 으로 변 수 를 지정 할 수 있 습 니 다. (유 니 티 인터페이스 가 아 닌) 어떻게 할 수 있 습 니까?위 에서 빈 칸 을 눌 렀 을 때 스포트라이트 가 큐 브 에 초점 을 맞 추 는 것 을 알려 줍 니 다. 우 리 는 SpotLight 스 크 립 트 에서 명시 적 인 변 수 를 만들어 큐 브 를 끌 어 올 립 니 다.코드 에 서 는 주로 두 가지 방법 으로 이 루어 집 니 다.
1. 대상 의 이름 사용 (name)
2. 대상 의 태그 사용 하기 (tag)
1. 대상 이름
Hierarchy 패 널 에서 대상 의 이름 을 볼 수 있 습 니 다.GameObject. Find () 함수 로 이 이름 들 을 매개 변수 로 합 니 다.그래서 우 리 는 이렇게 쓸 수 있다.
function Update(){
	if(Input.GetButtonDown("Jump"))
	{
		var newTarget = GameObject.Find("Cube").transform;
		GetComponent(SpotLight).target = newTarget;
	}
}

위 에 명시 적 변수 가 나타 나 지 않 았 음 을 주의 하 십시오.
2. 대상 태그
대상 탭 은 구성 요 소 를 식별 하 는 문자열 입 니 다.Inspector 패 널 에서 태그 단 추 를 누 르 면 내 장 된 탭 을 봅 니 다.우리 도 자신의 탭 을 만 들 수 있다.GameObject. FindWithTag () 함 수 는 구체 적 인 탭 을 통 해 구성 요 소 를 찾 고 문자열 을 매개 변수 로 되 돌려 줍 니 다.
function Update(){
	if(Input.GetButtonDown("Jump"))
	{
		var newTarget = GameObject.FindWithTag("fang").transform;
		GetComponent(SpotLight).target = newTarget;
	}
}

7. 실례
실행 할 때 대상 을 만 들 려 면 Instantiate 함 수 를 사용 해 야 합 니 다.매번 시동 버튼 (마우스 왼쪽 단추 나 Ctrl 키) 을 누 를 때마다 새로운 대상 을 예화 하 는 방법 을 실현 합 니 다.다음 과 같은 몇 가 지 를 생각해 야 한다.
1. 어떤 물체 가 우리 의 실례 를 합 니까?
2. 어디서 예화 합 니까?
첫 번 째 문제 에 대해 가장 좋 은 방법 은 명시 적 변수 이다.이렇게 하면 우 리 는 수시로 드래그 앤 드 롭 을 통 해 우리 의 실례 대상 을 바 꿀 수 있다.어디서 실례 화 되 었 는 지 에 대해 서 는 시동 버튼 을 눌 렀 을 때 사용자 의 현재 위치 에 대상 을 만 들 면 됩 니 다.실례 화 함 수 는 세 개의 인자 가 있 습 니 다. 1. 우리 가 만 들 대상 입 니 다.2. 대상 의 위치 좌표.3. 대상 의 회전 위치.전체 코드 는 다음 과 같 습 니 다:
var newObject : Transform;
function Update(){
    if(Input.GetButtonDown("Fire1")){
        Instantiate(newObject, transform.position, transform.rotation);
    }
}

transform, position, transform, rotation 은 이 스 크 립 트 를 추가 하 는 물체 의 위치 임 을 기억 하 세 요.우 리 는 여기에 메 인 카 메 라 를 가정한다.일반적인 상황 에서 실례 화 될 대상 을 프 리 셋 (prefab) 으로 설정 하고, 큐 브 를 프 리 셋 으로 설정 합 니 다.
- 우선 프 리 셋 을 만 듭 니 다.Assets->Create->Prefab。큐 브 라 고 명명 하 다.
- Hierarchy 패 널 에서 큐 브 를 선택 하여 Project 패 널 의 큐 브 에 끌 어 다 놓 습 니 다.
- 스 크 립 트 를 만 들 고 Create 라 고 이름 을 짓 고 위의 코드 를 추가 합 니 다.
- 이 스 크 립 트 를 카메라 에 부여 하고 큐 브 를 스 크 립 트 변수 에 미리 설정 합 니 다.
- 운행.카 메 라 를 움 직 이 고 시동 버튼 을 누 르 면 새로운 큐 브 가 나타 나 는 것 을 볼 수 있다.
8. 디 버 깅
디 버 깅 은 코드 에서 인위적인 오 류 를 발견 하고 수정 하 는 기술 입 니 다. Unity 에서 Debug 류 를 제공 합 니 다. Debug. Log () 함 수 를 보 겠 습 니 다.
Log () 함 수 는 사용자 가 유 니 티 콘 솔 에 메 시 지 를 보 낼 수 있 도록 합 니 다.이렇게 하 는 이 유 는 다음 과 같다.
1. 실행 할 때 일부 코드 가 달성 되 었 는 지 확인 해 야 합 니 다.
2. 변수의 상 태 를 보고 합 니 다.
저 희 는 현재 Log () 함 수 를 사용 하고 있 습 니 다. 사용자 가 켜 기 단 추 를 눌 렀 을 때 유 니 티 콘 솔 에 메 시 지 를 보 냅 니 다.
- 만 든 스 크 립 트 를 열 고 "Instantiate" 코드 에 "if" 에 다음 코드 를 추가 합 니 다.
Debug.Log("Cube created");

- 운행.발포 키 를 누 르 면 유 니 티 화면 아래 현식 '큐 브 크 리 에이 티 브' 를 볼 수 있다.
또 하나의 유용 한 기능 은 개인 변 수 를 디 버 깅 하 는 데 쓰 인 다.Debug 모드 가 선택 되 었 을 때 Inspector 패 널 의 변 수 를 편집 할 수 없습니다.이 를 증명 하기 위해 서, 우 리 는 큐 브 실례 의 계수기 로 개인 변 수 를 명시 할 것 이다.스 크 립 트 에 두 줄 의 내용 을 추가 합 니 다. 1. 개인 변수 cube Count 를 추가 합 니 다.2. cube 인 스 턴 스 를 만 들 면 이 변 수 를 추가 합 니 다.
전체 코드 는 다음 과 같 습 니 다:
var newObject : Transform;
private var cubeCount = 0;
function Update(){
	if(Input.GetButtonDown("Fire1"))
	{
		Instantiate(newObject, transform.position, transform.rotation);
		Debug.Log("Cube created");
		cubeCount++;
		Debug.Log(cubeCount);
	}
}

9. 흔 한 스 크 립 트 종류
//                   。    Rigibody            。 :
// Apply a upwards force to the rigibody every frame
function FixedUpdate(){
	rigidbody.AddForce(Vector3.up);
}


//            。
Awake(){

}

//     Update()  ,  Awake()    。
//Start()   Awake()        Start()            (Inspector          )。
Start(){

}

//                               。
OnCollisionEnter(){

}

//        GUI  (GUIElement)    (Collider)                   。
// Loads the level named "SomeLevel" as a response
// to the user clicking on the object
function OnMouseDown(){
        Application.LoadLevel("SomeLevel");
}

//        GUI           ,          。 :
// Fades the red component of the material to zero
// while the mouse is over the mesh
function OnMouseOver(){
        renderer.material.color.r -= 0.1 * Time.deltaTime;
}

좋은 웹페이지 즐겨찾기