2016-10-11 7 views
1

RayCastでオブジェクトを配置できますが、オブジェクトを互いに内側に配置しています私はそれがのようにオブジェクトを検出した場合、のオブジェクトがある場合は、その上に新しいオブジェクトを配置する必要があります。または左に衝突する場合は、オブジェクトを右に置く必要があります。オブジェクトを別のオブジェクトの上部に配置するにはどうすればいいですか?

は、ここに私のコード

using UnityEngine; 
using System.Collections; 

public class targetPosition : MonoBehaviour { 

    public GameObject obj; 
    Vector3 newPosition; 
    void Start() { 
     newPosition = transform.position; 
    } 
    void Update() 
    { 
     if (Input.GetMouseButtonDown(0)) //It places cube on left click 
     { 
      RaycastHit hit; 
      Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
      if (Physics.Raycast(ray, out hit)) 
      { 
       newPosition = hit.point; 
       GameObject obj1 = Instantiate(obj,newPosition, Quaternion.identity) as GameObject; 
       obj1.SetActive (true); 

      } 
     } 
     if (Input.GetMouseButtonDown (1)) //deletes cube on right click 
     { 
      Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
      RaycastHit hit; 
      if (Physics.Raycast(ray, out hit)) 
      { 
       Destroy(hit.collider.gameObject); 
      } 
     } 

    } 
} 

おかげです。

+0

こんにちは。コライダーを調べる必要があります(https://docs.unity3d.com/ScriptReference/Collider.html)。トリガーとしても使うことができることを覚えておいてください。だからキューブの配置では、あなたは魔女のトリガーが使用されていることを確認する必要があります、キューブを上または右または何かを移動... –

答えて

0

このコードでは、あなたのレイが当たるオブジェクトセットのどの面を検出できます。それ以降は、その点からあるオフセットでオブジェクトをインスタンス化する必要があります。

Vector3 normalOfHit; 
    void Update() 
     { 
      if (Input.GetMouseButtonDown(0)) //It places cube on left click 
      { 
       RaycastHit hit; 
       Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
       if (Physics.Raycast(ray, out hit)) 
       { 
        normalOfHit = hit.normal; 
        normalOfHit = hit.transform.TransformDirection(normalOfHit); 

        if(normalOfHit == hit.transform.up) 
        { 
         Debug.Log("Hit top side"); 
        } 
        if (normalOfHit == -hit.transform.up) 
        { 
         Debug.Log("Hit bottom side"); 
        } 
        if (normalOfHit == hit.transform.right) 
        { 
         Debug.Log("Hit right side"); 
        } 
        if (normalOfHit == -hit.transform.right) 
        { 
         Debug.Log("Hit left side"); 
        } 
        if(normalOfHit == hit.transform.forward) 
        { 
         Debug.Log("Hit front side"); 
        } 
        if(normalOfHit == -hit.transform.forward) 
        { 
         Debug.Log("Hit back of object"); 
        } 
       } 
      } 
    } 
関連する問題