初めまして、先日からunityを始めた現在大学二年生のものです。
重なりのある2つのオブジェクトに対して、RaycastでlayerMaskを指定することで、一方のオブジェクトのみ検出しようとしています。以下のように設定したのですが、うまくいきません。問題点をご教授いただきたいです。
RaycastHit2D origin = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero, layerMask);
2つのオブジェクトのうち、一方のオブジェクトのlayerはinspectorでデフォルトの0になっており、もう一方のlayerをinspectorで1に変更しました。
変数であるlayerMaskは次のように設定しました。
public class DragAndDrop : MonoBehaviour
{
LayerMask layerMask;
public GameObject SelectedPiece; // Start is called before the first frame update void Start() { layerMask = 1; }
全体のコードがこちらです。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DragAndDrop : MonoBehaviour
{
LayerMask layerMask;
public GameObject SelectedPiece; // Start is called before the first frame update void Start() { layerMask = 1; } // Update is called once per frame void Update() { if (Input.GetMouseButtonDown(0)) { RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero); if (hit.transform.CompareTag("Puzzle")) { SelectedPiece = hit.transform.gameObject; } } if (Input.GetMouseButtonUp(0)) { RaycastHit2D origin = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero, layerMask); if (origin.transform.CompareTag("Origin")) { Debug.Log("当たってる"); SelectedPiece.transform.position = origin.transform.position; } SelectedPiece = null; } if (SelectedPiece != null) { Vector3 MousePoint = Camera.main.ScreenToWorldPoint(Input.mousePosition); SelectedPiece.transform.position = new Vector3(MousePoint.x, MousePoint.y, 0); } }
}
分かる方いれば、ぜひよろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。