Unity3D에서 게임 개체를 한 위치에서 다른 위치로 천천히 이동

때로는 게임 개체를 한 위치에서 다른 위치로 이동하고 이동 속도를 유지해야 합니다. Vector3.MoveTowards()는 이에 대한 완벽한 솔루션이 될 수 있습니다. 빈 게임 오브젝트를 생성하고 게임 오브젝트를 이동해야 하는 위치를 설정해야 합니다. 그런 다음 또 다른 빈 게임 개체를 만들고 자식의 이전 두 게임 개체를 만듭니다.
DonkeyKong 게임 오브젝트를 플랫폼 B 위치로 이동해야 한다고 가정해 보겠습니다. 그러면 이렇게 될 수 있습니다.



그런 다음 스크립트를 만들고 상위 개체에 연결하고 다음 코드를 붙여넣습니다.

`System.Collections 사용;
System.Collections.Generic 사용;
UnityEngine 사용;

공개 클래스 PlatformMovement : MonoBehaviour
{
개인 Vector3 pointA;
개인 Vector3 pointB;
Vector3 nextPos;
[SerializeField] 부동 속도;
[SerializeField] 변환 childTransform;
[SerializeField]
변환 transformB;
//첫 번째 프레임 업데이트 전에 Start가 호출됩니다.
무효 시작()
{
pointA = childTransform.localPosition;
pointB = transformB.localPosition;
nextPos = 포인트B;
}

// Update is called once per frame
void Update()
{
    Move();
}

void Move()
{
    childTransform.localPosition = Vector3.MoveTowards(childTransform.localPosition, nextPos, speed*Time.deltaTime);

}

}
`

그런 다음 인스펙터에 변수를 설정합니다.



주기적인 동작으로 게임 개체를 이동하려면 두 줄을 추가해야 합니다.

`
System.Collections 사용;
System.Collections.Generic 사용;
UnityEngine 사용;

공개 클래스 PlatformMovement : MonoBehaviour
{
개인 Vector3 pointA;
개인 Vector3 pointB;
Vector3 nextPos;
[SerializeField] 부동 속도;
[SerializeField] 변환 childTransform;
[SerializeField]
변환 transformB;
//첫 번째 프레임 업데이트 전에 Start가 호출됩니다.
무효 시작()
{
pointA = childTransform.localPosition;
pointB = transformB.localPosition;
nextPos = 포인트B;
}

// Update is called once per frame
void Update()
{
    Move();
}

void Move()
{
    childTransform.localPosition = Vector3.MoveTowards(childTransform.localPosition, nextPos, speed*Time.deltaTime);
  //check if the position of gameobject is changed  if(Mathf.Abs(Vector3.Distance(childTransform.localPosition, nextPos) ) <= .1f)
    {
        ChangeDestination();
    }
}

void ChangeDestination()
{
  //set the next position
    nextPos = nextPos != pointA ? pointA : pointB;
}

}

`

좋은 웹페이지 즐겨찾기