25.02.17(월) - TIL 21일차 Unity 입문
localPosition은 현재 객체의 부모 기준 위치를 나타냄
transform.position은 월드 좌표(World Position) 기준 위치를 의미
로컬 좌표는 부모 오브젝트를 0,0,0 기준
월드 좌표는 월드 좌표에서의 0,0,0 좌표가 기준
public class Obstacle : MonoBehaviour
{
public float highPosY = 1f;
public float lowPosY = -1f;
public float holeSizeMin = 1f;
public float holeSizeMax = 3f;
public Transform topObject;
public Transform bottomObject;
public float widthpadding = 4f;
public 으로 선언시 unity 인스펙터 창에서 해당 오브젝트(Obstacle장애물)를 직접 수정가능
다른것으로 선언시 수정 불가능.
Vector3 pos = transform.position; // 내 위치 가져오기
pos.x = target.position.x + offsetX; // 캐릭터의 위치로 카메라가 가는것이 아니고
// 캐릭터의 위치보다 처음에 배치했건 거리(offsetX)만큼 떨어진 상태로 따라감
transform.position = pos; // 포지션을 가져올때는 항상 변수에 한번 저장했다가
// 변조하고 다시 저장시키는 방법을 써야한다
Obstacle[] obstacles= GameObject.FindObjectsOfType<Obstacle>();
// FindObjectsOfType<Obstacle>()의 뜻은 이 씬에 존재하는 모든 오브젝트들을 돌아다니면서
// Obstacle 이 달려있는걸 전부 다 찾아서 넘겨준다
static GameManager gameManager; // 본인을 참조할 수 있는 static 변수public static GameManager Instance { get { return gameManager; } }
// 그 변수를 외부로 가져갈 수 있는 프로퍼티(Instance) // instance // 싱글톤 클래스의 유일한 인스턴스
private void Awake()
{
gameManager = this; // 가장 최초의 객체를 설정해주는 작업
}
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
//SceneManager 사용시 using UnityEngine.SceneManagement;
//현재 활성화된 씬(Scene)을 다시 가져오고 씬의 이름을 사용하여 로드(재시작)하는 코드입니다.
newTrans = newBlock.transform;
newTrans.parent = this.transform;
새로 생성된 오브젝트(newBlock)의 Transform을 가져와서, 현재 오브젝트(this.transform)의
자식으로 설정하는 코드.
다르게 설명하면
newTrans 가 this.transform 의 하위 오브젝트가됨
this 가 누구냐 TheStack(현재 작성중인 스크립트) 스크립트가 부착된 오브젝트
선형 보간법 - Lerp > 위치, 속도 , 색상, 크기 를 부드럽게 변화시킬때 사용
transform.position = Vector3.Lerp(transform.position, desiredPosition, stackMovingSpeed * Time.deltaTime);
현재 오브젝트의 위치(transform.position)를 목표 위치(desiredPosition)로
부드럽게 이동시키는 역할을 합니다.
Vector3.Lerp(start, end, t)
start에서 end로 보간(중간값 계산) 하여 부드럽게 이동
t 값(0~1)을 기반으로 두 위치 사이의 중간값을 반환
blockTransition += Time.deltaTime * BlockMovingSpeed;
//블럭 진행값에 Time.deltaTime을 곱해 프레임 속도와 무관하게 일정한 속도로 증가
float movePosition = Mathf.PingPong(blockTransition, BoundSize) - BoundSize / 2;
// 블럭을 좌우든 상하든 왕복운동을 시키는 역할수행 // 괄호 안의 값 = Mathf.PingPong(t, length)
// blockTransition 이 0 ~ BoundSize(length(3.5))까지 올라갔다 내려갔다 반복
// 이를 나누기2를 하면 범위로 변환하여 양쪽으로 대칭적인 움직인 구현 // 기준을 1.75로 만듬
양수그래프에서만 위아래로 움직이다가 /2 를 하면 0을 기준으로 양,음수를 왕복운동함.