我不是 Unity 专业人士,而是开始制作我的第一个 2D 游戏。 在此脚本中,从该点向光标释放一条射线,如果它击中钩子,则会创建绳子的一部分。
using UnityEngine;
public class ThrowRope : MonoBehaviour
{
[SerializeField] private GameObject _hook;
[SerializeField] private GameObject _unitRopePref;
[SerializeField] private Transform _player;
void Update()
{
if (Button.nuberPerson == 2)
{
if (Cursorrender.cursRopeMode)
{
Ray ray = new Ray(transform.position, transform.forward);
RaycastHit hit;
Debug.DrawRay(ray.origin, ray.direction * 100, Color.red);
if (Input.GetMouseButtonUp(0))
{
Debug.Log("CLICK");
if (Physics.Raycast(ray, out hit))
{
Debug.Log("HIT");
if (hit.distance <= 200 && hit.collider.gameObject == _hook)
{
Debug.Log("INSTANTIATE");
Instantiate(_unitRopePref, hit.transform);
}
}
}
}
}
}
}
但是打开游戏并按下鼠标键后,即使光线应该击中物体,代码也只会到达 CLICK 消息。
如果假设光线到达光标(从相机的角度),请从观察相机使用 ScreenPointToRay。
if (Input.GetMouseButtonUp(0))
{
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out var hit))
{
Debug.Log($"Hit {hit.collider.name}");
}
}
您可以将
Camera.main
替换为对您相机的引用,或者根据需要缓存主相机(微优化)。