210712
unity_beginner #11
지금까지의 Ball 게임 화면을 보면 ground가 움직였을때 obstacle과 무관하게 따로 움직인 것을 볼 수 있다. -> 이를 함께 움직이게 하려면?
위와 같이 stage라는 게임 오브젝트를 생성 후 ground, obstacle을 드래그해서 넣어준다.
어떤것이 부모이고 자식인지 관계를 확인할 수 있다.
ground에 있는 script를 제거하고 stage에 넣어주면 동작을 동일하게 한다.
여기서 장애물과 ground 가 같은 기울기로 기울어지지만 장애물이 무언가 따로노는 느낌이 남아있다. 이는 local position과 관계가 있다.
화면에서 local로 표시된 부분이 있다. 이를 클릭하면 global과 local로 변환이 되는데. 이는 부모에 대한 상대적인 위치이냐 아니냐의 차이이다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Obstacle : MonoBehaviour
{
float delta = -0.03f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
float newXPosition = transform.position.x + delta; // local position이 아니다.
transform.position = new Vector3(newXPosition, 2, -7);
if(transform.position.x < -3.5)
{
delta = 0.03f;
}
else if(transform.position.x > 3.5)
{
delta = -0.03f;
}
}
}
위 코드는 obstacle의 script인데 position을 변경할 때 값은 local position이 아니다. 이를 local position으로 바꿔준다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Obstacle : MonoBehaviour
{
float delta = -0.03f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
float newXPosition = transform.localPosition.x + delta;
transform.localPosition = new Vector3(newXPosition, transform.localPosition.y, transform.localPosition.z);
if(transform.localPosition.x < -3.5)
{
delta = 0.03f;
}
else if(transform.localPosition.x > 3.5)
{
delta = -0.03f;
}
}
}
transform.position -> transform.localPosition으로 변경
ground 와 obstacle이 함께 움직이는 것을 확인