본문 바로가기

STUDY/Unity

[유니티 기초] 캐릭터의 이동(2)

728x90


6. Time.delta.Time

  - 이전 프레임의 시작 시각부터 현재 프레임이 시작되는 시각의 차(델타).

  - 소스코드가 같더라도 다른 환경에서 실행하면 속도가 달라지는 문제를 Time.deltaTime 을 곱함으로 해결.

  - 30 프레임 구동 기기 : Time.deltaTime 값 1/30s

//프레임마다 10유닛씩 이동
transform.Translate(Vector3.forward * 10)

//매 초 10유닛씩 이동
transform.Translate(Vector3.forward * Time.deltaTime * 10)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerCtrl : MonoBehaviour
{
	privae Transform tr;
    
    public float moveSpeed = 10.0f;
    
    void Start()
    {
    	tr = GetComponent<Transform>();
    }
    
    void Update()
    {
    	float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        
        Debug.Log("h=" + h);
        Debug.Log("v=" + v);
        
        //Translate 함수를 사용한 이동 로직
        tr.Translate(Vector3.forward * Time.deltaTime * v * moveSpeed);
    }
        
}

  - tr.Translate({이동할 방향} * Time.deltaTime * {전진/후진 변수} * {속도});

 

7. public, private 접근 제한자

  - c# 지원 접근 제한자

public 외부 클래스 O
private 동일 클래스 O, 외부 클래스 X
potected 외부 접근 X, 파생 클래스 O
internal 같은 어셈블리 O, Default로 설정시 internal 접근 제한자로 설정.

  - [접근 제한자] 변수_타입 변수명;

// 인스펙터 뷰에 노출되지 않음
private Transform tr;

// 인스펙터 뷰에 노출됨
public float moveSpeed = 10.0f

 

8. 우선순위

  - 인스펙터 뷰에 적용한 값이 스크립트에 적용한 값보다 우선순위로 작용함.

  - 인스펙터 뷰를 디버그 모드로 설정하면 private 변숫값 확인 가능.

  - 디버그 모드에서 변숫값 확인 후 반드시 노멀 모드로 전환해야함.

  - SerializeField 속성을 사용하여 private 변숫값 확인 가능

 

9. 벡터의 덧셈 연산

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerCtrl : MonoBehaviour
{
	private Transform tr;
    
    public float moveSpeed = 10.0f;
    
    void Start()
    {
    	tr = GetComponent<Transform>();
    }
    
    void Update()
    {
    	float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        
        Debug.Log("h=" + h);
        Debug.Log("v=" + v);
        
        //전후좌우 이동 방향 벡터 계산
        Vector3 moveDir = (Vector3.forward * v) + (Vector3.right * h);
        
        //Translate(이동 방향 * 속력 * Time.deltaTime)
        tr.Translate(moveDir * moveSpeed * Time.deltaTime)l
    }
}

  - Vector3.normalized 속성 : 벡터의 방향 성분 추출을 위해 정규화 벡터로 변경.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerCtrl : MonoBehaviour
{
	private Tranform tr;
    
    public float moveSpeed = 10.0f;
    
    void Start()
    {
    	tr = GetComponent<Transform>();
    }
    
    void Update()
    {
    	float h = Input.GetAxis("Hotizontal");
        float v = Input.GetAxis("vertical");
        
        Debug.Log("h=" + h);
        Debug.Log("v=" + v);
        
        // 전후좌우 이동 방향 벡터 계산
        Vector3 moveDir = (Vector3.forward * v) + (Vector3.right * h);
        
        // Translate(이동 방향 * 속력 * Time.deltaTime)
        tr.Translate(moveDir.normalized * moveSpeed * Time.deltaTime);
    }
}

 

728x90