カメラから見たターゲット平面上の衝突点

gamedev csharp unity

2021-11-07

カメラから見たターゲット平面上の衝突点

[SerializeField]
private GameObject camera;
[SerializeField]
private GameObject target;
 
this.UpdateAsObservable()
   .Subscribe(_ => {
      // <https://qiita.com/edo_m18/items/c8808f318f5abfa8af1e>
       var n = Vector3.forward;
       var x = target.transform.position;
       var x0 = camera.transform.position;
       var m = camera.transform.forward;
       var h = Vector3.Dot(n, x);
       var hitPos = x0 + ((h - Vector3.Dot(n, x0)) / (Vector3.Dot(n, m))) * m;
   });

Tag “Screen” オブジェクトとのヒットを検出

using UnityEngine;
 
public class CursorController : MonoBehaviour {
    // Update is called once per frame
    void Update() {
        var ray = new Ray(Camera.main.transform.position, Camera.main.transform.rotation * Vector3.forward);
 
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit)) {
            if (hit.transform.gameObject.name == "Screen") {
                Debug.Log("Hit");
                transform.position = hit.point + new Vector3(0, 0.01f, 0);
            }
        }
    }
}