2017-11-11 15 views
0

이 코드 사용하고 있습니다 :가속도계 운동 제한

void Update() 
{ 
    accel = Input.acceleration.x; 
    transform.Translate (0, 0, accel); 
    transform.position = new Vector3 (Mathf.Clamp (transform.position.x,-6.9f, 6.9f), -4.96f, 18.3f); 
} 

그것은 내 게임 오브젝트가 내가 원하는 방식으로 이동하게하지만 문제는 그런 내 휴대 전화, (-6.9)(6.9)에 응용 프로그램을 둘 때 내 화면의 "끝"이 아닙니다. 그리고 모든 화면 크기에 따라 값을 변경하는 방법을 알아낼 수 없습니까?

+1

'Screen.width'와'Screen.height'를 사용하고 가능한 한 많이 하드 코딩하는 것을 피하십시오. –

+0

재생 해 주셔서 감사합니다. screen.width 및 height 사용 방법을 설명 할 수 있습니까? –

+0

나는하려고하지만, 나는 당신의 상황에서 그것을 돕기에 충분한 정보가 없다. 달성하고자하는 이미지를 게시 할 수 있습니까? –

답변

0

이것은 좀 더 긴 대답이 될 것이므로 여기에 나와 함께하시기 바랍니다.

정자도 카메라를 사용한다고 가정합니다. 사용 된 공식은 원근 카메라에서는 작동하지 않습니다.

나는 당신의 욕망이 화면 경계 안에 당신의 사물을 유지하는 것이라고 이해할 수있다. Unity의 화면 경계는 카메라 크기와 화면 크기의 조합으로 결정됩니다.

float height = Camera.main.orthographicSize * 2; 

카메라의 직교 크기는 세계 단위에서 화면의 크기의 절반을 결정합니다. 이 값을 곱하면 화면의 상단과 하단 사이에 세계 단위가 표시됩니다.

이 값에서 너비를 가져 오려면 값의 값을 화면의 너비를 화면 높이로 나눈 값을 곱합니다.

float width = height * Screen.width/Screen.height; 

이제 우리는 화면의 크기를 갖지만 그 경계 내에서 개체를 유지해야합니다.

먼저 우리는 위치의 최대 값과 최소값을 결정하는 데 사용할 유형의 인스턴스를 만듭니다. 우리는 우리의 경계 인스턴스의 중심부터 Vector3.zero을 사용

Bounds bounds = new Bounds (Vector3.zero, new Vector3(width, height, 0)); 

주의는 세계의 중심이되어야합니다. 이것은 개체가 내부로 이동할 수 있어야하는 영역의 중심입니다.

마지막으로 결과 경계 값 속성에 따라 개체의 위치 값을 고정합니다.

Vector3 clampedPosition = transform.position; 
clampedPosition.x = Mathf.Clamp(clampedPosition.x, bounds.min.x, bounds.max.x); 
transform.position = clampedPosition; 

이렇게하면 개체가 화면의 경계를 떠나지 않도록해야합니다.

+0

설명해 주셔서 감사합니다. 그러나 이제는 단결로 인해 bounds.min.x 및 bounds.max.x : 'Assets/scripts/controller'에 대한 오류가 발생합니다.cs (31,54) : 오류 CS0103 : 이름'bounds '가 현재 컨텍스트에 존재하지 않습니다.' –

+0

@TodorValkov 컨트롤러 스크립트의 private 변수에 변수'bounds'를 분명히 저장해야합니다. –

+0

오, 지금 내가 understend. 고맙습니다!! 지금 일하고있다. –