我试图从我的枪的位置向我单击射击时鼠标所在的方向发射光线。
当我的角色位于屏幕中心但随后以远离原点的任何距离进行偏移时,此方法有效。
它仍然具有相同的射线原点(我的枪),但射线的方向不会是我的鼠标所在的位置(将根据我与 0,0,0 的距离进行偏移)。
已尝试多次修复,希望得到任何帮助。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Gun : MonoBehaviour
{
// Start is called before the first frame update
public int gunDamage = 5;
[SerializeField] Vector3 worldPosition;
Vector3 mousePos;
void Start()
{
}
// Update is called once per frame
void FixedUpdate()
{
worldPosition.z = 0;
if (Input.GetMouseButtonDown(0))
{
mousePos = Input.mousePosition;
//mousePos.z = Camera.main.nearClipPlane;
worldPosition = Camera.main.ScreenToWorldPoint(mousePos);
worldPosition.z = 0;
RaycastHit2D hits = Physics2D.Raycast(transform.position, worldPosition);
Debug.DrawRay(transform.position, worldPosition);
if(hits.collider != null)
{
Health es = hits.collider.GetComponent<Health>();
es.TakeDamage(gunDamage);
}
}
}
}
已尝试使用Vector 3和2。还尝试使用射线来计算鼠标的位置,而不是使用screentoworldpoint。同样的问题。
Physics2D.Raycast的第二个参数是
direction
您需要指定光线投射的方向,而不是您要重新投射的目标全局位置。您正在从 0,0 到鼠标的方向进行光线投射,这就是为什么如果玩家不再位于 0,0,您的光线投射将不起作用。
使用此代码首先计算正确的方向。
Vector3 direction = (worldPosition - transform.position).normalized;
RaycastHit2D hits = Physics2D.Raycast(transform.position, direction);
Debug.DrawRay(transform.position, direction);