Unity - 光线投射仅适用于原点

问题描述 投票:0回答:1

我试图从我的枪的位置向我单击射击时鼠标所在的方向发射光线。

当我的角色位于屏幕中心但随后以远离原点的任何距离进行偏移时,此方法有效。

它仍然具有相同的射线原点(我的枪),但射线的方向不会是我的鼠标所在的位置(将根据我与 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。同样的问题。

c# unity-game-engine 2d unityscript ray
1个回答
0
投票

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);
© www.soinside.com 2019 - 2024. All rights reserved.