使用光线投射和实例化对象问题检查与多边形碰撞器的碰撞(统一)

Posted

技术标签:

【中文标题】使用光线投射和实例化对象问题检查与多边形碰撞器的碰撞(统一)【英文标题】:Checking collision with Polygon Collider using Ray cast and instantiating objects issue (unity) 【发布时间】:2022-01-10 11:41:47 【问题描述】:

我正在尝试在 Unity 游戏中使用 Raycast 在我的场地上检查与多边形碰撞器的碰撞。如果满足条件,则通过单击按钮在光线投射的位置创建裁剪。即使它完美地检查了碰撞,我也有一些我无法弄清楚如何解决的问题。喜欢:

我的射击游戏对象随机传送到场景中,但光线投射始终正确 O_o。 实例化的裁剪在下一次实例化时消失...

有人可以帮我解决它吗?代码如下:

public class PlayerRay : MonoBehaviour

    float borderLeft = -4.34f;
    float borderRight = 3.85f;
    float borderUp = 1.61f;
    float borderDown = -2.32f;

    public GameObject field;
    public GameObject shooter;
    public Transform shooterPos;
    PolygonCollider2D fieldCollider;
    public GameObject repka;


    private void Start()
    
        fieldCollider = field.GetComponent<PolygonCollider2D>();
        
    
    void Update()
    
       
    
    public void Sow()
    
        
        Vector3 rayCastPos = new Vector3(Random.Range(borderLeft, borderRight), Random.Range(borderDown, borderUp), 0);
        shooter.transform.Translate(rayCastPos);
        

        Debug.DrawRay(transform.position, transform.forward * 10, Color.yellow);
        RaycastHit2D hit = Physics2D.Raycast(rayCastPos, Vector3.forward);

        
        if (hit == fieldCollider)
        
            Debug.Log("We hit collider");
            Instantiate(repka, shooterPos);
            
        
        else
        
            Debug.Log("There is no colider at: " + rayCastPos);
        
    

enter image description here

【问题讨论】:

Physics2d.raycast 没有开始位置? @JustARandomWibuuuu 它有。这是 rayCastPos。 哦,我明白了,我没看到长度 【参考方案1】:

我找到了解决方案!只是我尝试使用 Transform 重载进行实例化,而不是使用 Vector3。因为我忘记添加“旋转”作为第三个参数。所以我切换到 Vector3 重载,添加 Quaternion.identity 进行旋转,现在一切正常:)

这里是修复:

Instantiate(repka, rayCastPos, Quaternion.identity);

【讨论】:

以上是关于使用光线投射和实例化对象问题检查与多边形碰撞器的碰撞(统一)的主要内容,如果未能解决你的问题,请参考以下文章

THREE.js 对单个 > 500k 多边形(面)对象的光线投射非常慢,与地球的线相交

Hololens 2 的光线投射问题

Three.js 用于碰撞检测的光线投射

如何在 Bullet 中找到投射光线以避免碰撞的位置?

光线投射算法(如何计算一个坐标点是不是在一个多边形内)

Unity3D 5.x 交互功能 - 光线投射碰撞设置