2015-09-02 7 views
0

Я пытаюсь закрепить значение y для моего игрового объекта как 4 и -4, но он продолжает прыгать на ymax и ymin. и единственная причина, о которой я могу думать, - это из-за последнего кода строки. Я только зажимаю значения y, потому что значения x и z не изменяются в игре. игра похожа на понг.Gameobject не зажимает, а скорее раздражает

using UnityEngine; 
using System.Collections; 

public class Movement1 : MonoBehaviour 
{ 

public Vector3 Pos; 
void Start() 
{ 
    Pos = gameObject.transform.localPosition; 
} 

public float yMin, yMax; 
void Update() 
{ 
    if (Input.GetKey (KeyCode.W)) { 
     transform.Translate (Vector3.up * Time.deltaTime * 10); 
    } 
    if (Input.GetKey (KeyCode.S)) { 
     transform.Translate (Vector3.down * Time.deltaTime * 10); 
    } 

    Pos.y = Mathf.Clamp(Pos.y,yMin,yMax); 
    gameObject.transform.localPosition = Pos; 
} 

} 

ответ

0

Назначение pos.y никогда не происходит, потому что вы не можете изменить только у-значение; вы должны создать новый Vector3. Попробуйте следующее:

using UnityEngine; 
using System.Collections; 

public class Movement1 : MonoBehaviour 
{ 

public float yMin, yMax; // be sure to set these in the inspector 
void Update() 
{ 

    if (Input.GetKey (KeyCode.W)) { 
     transform.Translate (Vector3.up * Time.deltaTime * 10); 
    } 
    if (Input.GetKey (KeyCode.S)) { 
     transform.Translate (Vector3.down * Time.deltaTime * 10); 

    } 

    float clampedY = Mathf.Clamp(transform.localPosition.y,yMin,yMax); 
    transform.localPosition = new Vector3 (transform.localPosition.x, clampedY, transform.localPosition.z); 

} 

} 
+0

Спасибо! Я понял! –

0

Вы не инициализировать любые значения для yMin, yMax.

Кроме того, вы должны поставить else if для второго Translate, в противном случае нажатие обоих может вызвать колебания.

Но на самом деле, это должно быть больше, как это:

using UnityEngine; 
using System.Collections; 

public class Movement1 : MonoBehaviour 
{ 
    public Vector3 Pos; 
    public float speed = 10f; 
    public float yMin = 10f; 
    public float yMax = 50f; 

    void Update() 
    { 
     Pos = gameObject.transform.localPosition; 

     if (Input.GetKey (KeyCode.W)) 
      Pos += (Vector3.up * Time.deltaTime * speed); 

     if (Input.GetKey (KeyCode.S)) 
      Pos += (Vector3.down * Time.deltaTime * speed); 

     Pos.y = Mathf.Clamp(Pos.y,yMin,yMax); 
     gameObject.transform.localPosition = Pos; 
    } 
}