Raycast 仅在我以中等速度移动时才有效?

Posted

技术标签:

【中文标题】Raycast 仅在我以中等速度移动时才有效?【英文标题】:Raycast is only working when I move at a moderate speed? 【发布时间】:2021-10-12 02:33:36 【问题描述】:

我曾经使用 raycast 来破坏游戏中的东西,除非我移动得很快,否则它不起作用我将这个脚本统一附加到我的主摄像机上,谁能告诉我我做错了什么,因为我希望它发生无论你是否静止不动。


void Update()
    
        if (Input.GetMouseButtonDown(0))
        
            Vector2 mousePos = new Vector2(Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y);
            RaycastHit2D hit = Physics2D.Raycast(mousePos, Vector2.zero, 100f);
            
            if (hit.collider.tag == "Ground")
            
                Debug.Log("You clicked a block and tried to break it!");
                Destroy(hit.collider.gameObject);
            
        
    

【问题讨论】:

您没有遇到错误吗?你假设命中对象总是被填充,你应该首先检查是否不为空。 【参考方案1】:

Physics2D.Raycast 应该在 FixedUpdate 中使用,因为在那里计算物理。物理与帧无关。

【讨论】:

我试过这样做,但它给了我同样的问题,没有区别。【参考方案2】:

来自docs:

RaycastHit2D Raycast(Vector3 origin, Vector3 direction, float distance)

您已为光线投射指定了一个方向。

一般情况下,您应该使用ScreenPointToRay 并将光线原点和方向传递给Raycast

【讨论】:

以上是关于Raycast 仅在我以中等速度移动时才有效?的主要内容,如果未能解决你的问题,请参考以下文章

Cordova,onResume() 仅在我包含 alert() 时才有效

Firebase 云消息传递的 getToken() 仅在我省略 usePublicVapidKey 方法时才有效,为啥?

为啥 VS 2010 Intellisense 仅在我安装了视觉辅助 X 时才有效?

为啥我的 C# Xml 代码仅在我枚举变量 enumerable 时才有效

glDrawArrays 仅在我将“错误”数据传递给它时才有效

使用 IBO/EBO 时,程序仅在我调用 glBindBuffer 以在创建 VAO 后绑定 IBO/EBO 时才有效