2017-10-19 6 views
0

J'ai un sprite qui est déplacé en cliquant et en faisant glisser et le code fonctionne bien jusqu'à ce que je tente de contenir le sprite de quitter la scène. ce problème est que je ne peux pas travailler sur la façon de faire glisser un objet de jeu et ignorer reste de la scène. essayé d'utiliser si les déclarations et les étiquettes, mais peuvent obtenir de convertir la chaîne en bool ou d'autres erreurs de conversion.Cant garder sprite à l'écran, la distribution des rayons sélectionne tous les boaders de collision et les déplace, se déplaçant toute arrière plan

code ci-dessous est attaché à la caméra principale

public GameObject gameObjectToDrag; // refer to Go that being dragged 

public Vector3 Gocenter; // gameobject centre 
public Vector3 touchPosition; // touch or click position 
public Vector3 offSet; // vector between touchpoint/mouse click to the object centre 
public Vector3 newGOCenter; // new center of object 

RaycastHit hit; // store hit object information 

public bool draggingmode = false; // 



// Use this for initialization 
void Start() { 

} 

// Update is called once per frame 
void Update() 
{ 

    //******************************** 
    // **Click to Drag**************** 
    //******************************** 

si UNITY_EDITOR

// first frame when user click left button 

    /* if (Input.GetMouseButton(0)) 
    { 
     // convert mouse position to ray 
     Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 

     // if ray hit a collider (not 2dcollider) 
     if (Physics.Raycast(ray, out hit)) 
     { 
      gameObjectToDrag = hit.collider.gameObject; 
      Gocenter = gameObjectToDrag.transform.position; 
      touchPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); 
      offSet = touchPosition - Gocenter; 
      draggingmode = true; 
     } 
    } 

    // every frame when user hold left mouse 
    if (Input.GetMouseButton(0)) 
    { 
     if (draggingmode) 
     { 
      touchPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); 
      newGOCenter = touchPosition - offSet; 
      gameObjectToDrag.transform.position = new Vector3(newGOCenter.x, newGOCenter.y, newGOCenter.z); 
     } 
    } 
    */ 

    if (Input.GetMouseButton(0)) 
    { 

     Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 

     RaycastHit2D hit2d = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero); 



     if (Physics.Raycast(ray, out hit)) 
     { 

      gameObjectToDrag = hit.collider.gameObject; 
      Gocenter = gameObjectToDrag.transform.position; 
      touchPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); 
      offSet = touchPosition - Gocenter; 
      draggingmode = true; 

     } 


     if (hit2d) 
     { 
      Debug.Log("Hit something: " + hit2d.transform.tag); 
      gameObjectToDrag = hit2d.collider.gameObject; 
      Gocenter = gameObjectToDrag.transform.position; 
      touchPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); 
      offSet = touchPosition - Gocenter; 

      draggingmode = true; 

     } 

     if (Input.GetMouseButton(0)) 
     { 
      if (draggingmode) 
      { 


        touchPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); 
        newGOCenter = touchPosition - offSet; 
        gameObjectToDrag.transform.position = new Vector3(newGOCenter.x, newGOCenter.y, newGOCenter.z); 

      } 
     } 


    } 
    if (Input.GetMouseButtonUp(0)) 
    { 
     draggingmode = false; 
    } 

endif

Répondre

0

il était simple je couches d'ignorer la distribution des rayons.

désolé