2014-09-24 2 views
1

나는 위아래로 움직이는 표적을 가지고 있지만, 특정 y 축 범위로 수직 운동을 제한하는 방법을 모르겠습니다. 어떤 조언을 주셔서 감사합니다.Unity3D - y 축 범위 내에서 연속적으로 위아래로 움직이는 물체

using UnityEngine; 
using System.Collections; 

public class TargetMovementVertical : MonoBehaviour 
{ 
    public int maxSpeed; 

    private Vector3 startPosition; 

    // Use this for initialization 
    void Start() 
    { 
     maxSpeed = 3; 

     startPosition = transform.position; 
    } 

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

    void MoveVertical() 
    { 
     transform.position = new Vector3(transform.position.x, startPosition.y + Mathf.Sin(Time.time * maxSpeed), transform.position.z); 

     if(transform.position.y > 1.0f) 
     { 
      transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z); 
     } 
     else if(transform.position.y < -1.0f) 
     { 
      transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z); 
     } 
    } 
} 

답변

2

두 가지 의미가있을 수 귀하의 질문 : 당신은 y는, 다음 코드를 사용하여 내 -1 1로 이동 제한하려면

1- : (예를 들어, 원래 Y 경우 (당신의 결과 값 y의 발 : 5 동일, 결과는 범위 (4,6)

transform.position = new Vector3(0, startPosition.y + Mathf.Sin(Time.time * maxSpeed), 0); 

2는, 다음 코드를 사용하여 항상 -1 1에서 y 값을 확인하려면 내 것 ue는 원래 y 값에 관계없이 범위 (-1,1) 내에 있습니다.

transform.position = new Vector3(transform.position.x, Mathf.Sin(Time.time * maxSpeed), transform.position.z); 
+0

미안하지만, 내가 이미 장면에있는 물체를 가지고 있으며, 이미 그것이있는 곳을 기준으로 위아래로 움직이려하고 있습니다. 둘 다 시도했지만 여전히 제대로 작동하지 않습니다. 그것은 심지어 y 축을 위아래로 더 멀리 점프하게 만들었습니다. – khmer2040

+1

난 그냥 내 오래된 솔루션을 테스트하고 문제를 발견, 나는 우리가 오래된 y 값을 추가해서는 안된다고 생각, 나는 그것을 startPosition.y로 바꿨습니다. 내 업데이트 된 솔루션을 확인하십시오. –

+0

나는 일하게되었지만, 당신의 도움에 너무 감사드립니다. 정말 고맙습니다. :) – khmer2040

0

은 Unity3d 뭔가를 해본 적이 있지만,

이것은 :

transform.position = new Vector3(
    transform.position.x, transform.position.y, transform.position.z); 

아무것도하지 않는 다음과 같은 코드는? (A에서 INotifyPropertyChanged를 트리거 perhapse) +1 -1의 범위와 객체를 이동하려는 경우 신 기능이 이미 범위에서 가지고 있기 때문에


, 당신은 startPosition.y + Mathf.Sin(Time.time * maxSpeed)startPosition.y을 제거해야합니다 -1 +1로 이전 시작 위치를 추가하면 업데이트 할 때마다 값이 더 빨라집니다.


void MoveVertical() 
{ 
    transform.position.y = Mathf.Sin(Time.time * maxSpeed); 
} 
0

어떻게 Y 축 범위의 객체를 [1,3] 이동할 수 있습니까?

관련 문제