2D 弹跳公式无法正常工作

2024-04-20

我是 Unity 的新手,我正在尝试创建一个弹跳球,所以我做了很多关于弹跳相关物理的研究,我找到了一个公式:

Formula:

-2*(V dot N)*N + V

其中 V 是速度矢量,N 是球弹跳表面的法线

这是我的脚本:

using UnityEngine;

using System.Collections;

public class BallPhysics : MonoBehaviour {



    void Start () {
        rigidbody2D.velocity =new Vector2 (-1,-3);

    }

    // Update is called once per frame
    void Update () {

    }
    void OnTriggerEnter2D(Collider2D col) {

        if (col.gameObject.name == "Pong") {
            tBounce ();
                }


    }

    void tBounce(){
        RaycastHit2D hit = Physics2D.Raycast (new Vector2 (transform.position.x,transform.position.y), new Vector2(-1f,-1f));
        Vector2 n = hit.normal;
        Vector2 v = rigidbody2D.velocity;
        Vector2 R = -2 * (Vector2.Dot (v, n)) * n + v;
        rigidbody2D.velocity = R;
    }
}

我在启动函数中给球一个速度矢量,我使用 OnTriggerEnter2D 进行碰撞处理,并使用 raycast2D 来获取表面的法线。

问题是脚本没有反映称为 R 的速度矢量,我认为问题出在法线矢量中。

例如,假设 V 是 Vector2(-1,-1),所以基本上 R 应该是 (-1,1),但事实并非如此。 R 为 (3,1) !

我已经成功地能够通过反转球速度使球在水平/垂直表面上弹跳,但这在任意角度下都无法正常工作,这就是我使用这个公式的原因。 所以有什么问题 ?


您的光线投射可能击中了错误的对撞机。你开始于transform.position。那是球对象的中心点。

想象一条射线从圆心射出。它击中的第一行是什么?它首先撞击圆圈本身。因此,您的 Raycast 报告的是球的表面法线,而不是乒乓球拍。

有很多方法可以解决这个问题。您可以申请一个物理层 http://docs.unity3d.com/Manual/Layers.html忽略光线投射。我认为有一个这样的预定义。您也可以创建自定义图层并为光线投射提供图层蒙版。

还有其他方法可以解决这个问题,例如从其他地方发起光线投射,但由于您是在对象碰撞时执行此操作,因此图层蒙版可能是最简单的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2D 弹跳公式无法正常工作 的相关文章

  • 使用 Unity 3D 移动鼠标时相机跟随玩家

    我有一个简单的脚本 当我转动相机时 可以移动和环顾四周 但相机不随角色转动 我如何让它们一起转动 using System Collections Generic using UnityEngine public class PlayerF
  • 星系模拟:更改点的颜色并在鼠标悬停时显示文本

    我正在尝试创建模拟 https riteshsingh github io galaxies 4673 个最近星系的位置 星系是点 我想为鼠标悬停时的点着色并加载星系的名称 我花了很多天试图实现它 我可以更改颜色以及进行基本的光线投射 但是
  • AABB 碰撞解决滑动边

    因此 我目前正在重新发明轮子 并学到很多东西 尝试为我的游戏引擎制作一个简单的物理引擎 我一直在互联网上搜索 尝试 但失败 解决我当前的问题 关于这个主题有很多资源 但我发现的资源似乎都不适用于我的情况 问题简而言之 当两个矩形碰撞时 碰撞
  • 从通用平面获取轴对齐坐标

    标题可能是错误的 因为我不知道足够的数学知识来实际用一个小句子描述我的问题 我有一个 3D 矢量闭环 我将其称为 3D 多边形 我需要对其执行仅 2D 操作 这将返回一个 不同的 2D 点集 我需要将这些新的 2D 点转换回 3D 我目前的
  • 在 Unity 中双向旋转门

    我在 Unity 中创建了一扇打开和关闭的门 我可以通过打电话打开那扇门Interact 现在我想创建一扇始终远离玩家打开的门 就像酒吧的门一样 如果玩家在房间前面 门就会旋转到房间 如果玩家在房间里 门就会旋转出去 目前我创建了一个布尔值
  • 在代码中添加一个定时器,然后循环它

    尝试找到一种方法将计时器添加到我的代码中 然后用计时器不断循环它 例如 尝试通过单击按钮来制作物品 然后等待 5 秒以使其制作 然后只要我有材料 它就会自动开始再次制作 依此类推 我环顾四周的教程 但未能找到我一直在寻找的东西 这是我想要循
  • 目标加速度和子弹减速度随角度变化的弹丸目标预测

    我之前问过一个关于这个话题的问题here https gamedev stackexchange com questions 200260 intercept an accelerating object with a constant v
  • 如何让Visual Studio推荐unity代码

    我一直在学习 C 和 Unity 但我遇到的一个问题是 在 Visual Studio 上编写 C 脚本时 VS 似乎总是推荐对 Unity 无用的脚本 一个例子是当我输入Vector3 它会推荐BitVector32 你不能忽略它们 就好
  • Unity 自定义检查器和子检查器

    我正在Unity 2017 2 中开发一个小型ARPG 我尝试为我的游戏的能力蓝图类实现自定义编辑器 基本上 AbilityBluePrint 包含在运行时生成能力所需的所有信息 包括一个 Effect ScritpableObjects
  • 查找游戏对象的子对象的子对象

    我在场景中有一个预制件 我想访问该预制件的子项 该预制件的结构如下 PauseMenu UI Resume TextField TextField2 UI Side Back lt I need this child UI Home tra
  • 如何将字节数组转换为任何类型

    好的 我看到有人问如何将字节数组转换为int string Stream等等 答案各不相同 我个人还没有找到任何令人满意的答案 这里有一些我们想要将字节数组转换成的类型 UnityEngine Font可以吸收ttf data UnityE
  • 在无头模式下独立运行 Unity,同时捕获屏幕截图

    我需要创建一个在无头模式下运行的统一项目 使用 batchmode 命令 但它必须捕获屏幕截图 例如每一秒并将它们写到一个文件中 我知道在无头模式下 您需要强制调用 Camera Render 才能渲染任何内容 在捕获第一个屏幕截图后 时间
  • 使用 VSCode 作为编辑器时 Unity 打开多个工作区

    我按照 VSCode 中给出的教程将 VSCode 与 Unity 2017 3 0f3 集成Docs https code visualstudio com docs other unity 我面临一个问题 每当我从 Unity 项目资源
  • 使用cachedTextGenerator获取字母的正确位置

    考虑一个Text有许多文本段落 这很容易查找某个字符在哪里 using UI字符信息 http docs unity3d com ScriptReference UICharInfo html 例如 查找所有换行符 TextGenerato
  • 与动态功能模块(应用程序包)一起安装时“存储空间不足”

    我有一个使用 Android App Bundle 的 DFM 动态安装的 Unity 项目 使用 Unity 2019 3 导出 并将其上传到 google play 进行内部测试 动态模块可以按需下载 但是当我运行 UnityActiv
  • float.Parse 不再在 Unity 中工作 (C#)

    我有一个包含以下代码行的工作项目 public InputField mass float val float Parse mass text 非常简单 用户输入一定量的质量 然后将其从文本解析为浮动 几天前这工作得很好 我什至能够多次导出
  • unity 3d 根据加速度计旋转游戏对象

    我想做一款类似 神庙逃亡 的游戏 我需要根据设备倾斜的程度来旋转播放器的平台 我正在尝试加速计 但无法使游戏对象倾斜 请指导我 谢谢 这是我的代码 我之前在注释中使用了代码 现在我尝试使用注释中的代码 public class tilt M
  • Unity - 在生成时获取随机颜色

    我有一个小问题 我想在我的场景中生成四边形 它们都应该有红色或绿色作为材质 但 Random Range 函数只能是 int 我该如何解决它 void SpawningSquadsRnd rndColor 0 Color red rndCo
  • 无法使用 Unity 函数在 Visual Studio Code 中获得完整的 Intellisense

    好吧 我知道这个问题已经被问过并回答过很多次了 但我花了大约 3 天的时间试图解决这个问题 但到目前为止我所做的一切都没有奏效 我基本上在 Visual Studio Code 中有部分智能感知 也就是说 它似乎只识别 Unity 类和变量
  • 使用 Unity 在 C# 中发送 http 请求

    如何使用 Unity 在 C 中发送 HTTP GET 和 POST 请求 我想要的是 在post请求中发送json数据 我使用Unity序列化器 所以不需要 新的 我只想在发布数据中传递一个字符串并且能够 将 ContentType 设置

随机推荐

  • 从 csv 更新数据时,d3 在 setInterval 上闪烁文本

    我是 d3 的新人 学习了很多东西 我在更新从 csv 文件获取的数据时遇到了一些问题 我使用 setInterval 每秒更新数据 当它删除并再次插入数据时 它会闪烁几毫秒 表消失并生成新表 我究竟做错了什么 我怎样才能消除闪烁 感谢您的
  • 从 U-SQL 表加载数据时优化器内部错误

    有没有办法解决这个错误 CQO 内部错误 优化器内部错误 断言 a drgcidChild gt CLength UlSafeCLength popMS gt Pdrgcid 在 rlstreamset cpp 499 从分区 U SQL
  • 如何在输入对话框中预设光标或选择默认答案

    如果创建一个输入对话框inputdlg和默认答案 看起来像这样 我需要哪个回调命令才能使它看起来像那样 这里缺少很多文档 这是为客户提供的一种 豪华服务 但我认为如果它很容易实现的话那就太好了 这个问题实际上已经解决了 因为我发现有一些方便
  • 从 TinyMCE 对话框中获取输入字段值

    all 我很难弄清楚这一点 这是我第二次需要用tinyMCE做一些事情 但这次我找不到答案 这就是我想要做的 我在编辑器上添加了一个按钮 用于打开一个带有单个文本输入字段和一个按钮的新弹出窗口 我想单击按钮并获取在输入字段中设置的值 然后使
  • 使用 和指令重新排序进行基准测试

    到目前为止 我一直在使用传统方法来对并发方法进行基准测试 即测量多次运行的持续时间 template
  • MinGW 作为可靠的 64 位 GCC 编译器

    我担心 64 位 MinGW 编译器作为 Visual C 编译器的替代品的可靠性 例如 假设 C 代码使用 GCC 4 6 2 在 Linux 下完美构建和运行 相应的 MinGW 是否会在 64 位 Windows 下生成类似可靠的可执
  • Java 从基本构造函数调用基本方法

    如何从 Super Super 调用 Super printThree 在下面的示例中 我改为调用 Test printThree class Super Super printThree I want Super printThree h
  • 在 Swift 4 中,扩展声明还不能被覆盖

    我最近将我的代码迁移到Swift 4 我面临一个问题扩展 i e 扩展的声明还不能被覆盖 我已经阅读了多篇重新评估此问题的帖子 但他们都不接受下面描述的场景 class BaseCell UITableViewCell Some code
  • 在 Perl 中如何计算给定正态分布的点的概率?

    Perl 中是否有一个包可以让您计算每个给定点的概率分布高度 例如 这可以在 R 中以这种方式完成 gt dnorm 0 mean 4 sd 10 gt 0 03682701 即x 0点服从正态分布 mean 4 sd 10的概率为0 03
  • Twitter Bootstrap:Affix 在单页应用程序中未触发

    我正在做一个单页应用程序并使用 Twitter Bootstrap 我尝试像这样使用 Affix div 当我刷新页面时 一切正常 引导程序词缀添加了一个类 如下所示 div class affix top 当我超过 100px 后 它会将
  • 使用欧几里德算法计算数组值的最小公倍数

    我想使用欧几里德算法计算值数组的最小公倍数 我正在使用这个伪代码实现 发现于维基百科 https en wikipedia org wiki Euclidean algorithm function gcd a b while b 0 t
  • FTP 二进制 x ASCII 自动选择

    我编写了一个 FTP 插件 使用 python 的 ftplib 我想知道确定给定文件是否应该使用二进制或 ASCII 传输方法的最佳方法是什么 换句话说 自动 传输模式 当我收到有关双线的问题报告时 我开始研究这个问题 并且谷歌搜索发现二
  • 让回调在 JavaScript 中同步工作

    我正在使用一个名为DSBridge https github com wendux DSBridge IOS将移动应用程序 在本例中为 iOS 代码 连接到包含我的应用程序主要逻辑的 javascript 代码 这涉及在不可见的 WKWeb
  • Apache 服务器(xampp)在使用 openssl 函数时崩溃

    我正在尝试使用 php ini 生成私钥 公钥对 服务器 Apache 2 4 3 Win32 OpenSSL 1 0 1c PHP 5 4 7 操作系统是 Windows XP SP3 安装了所有 Windows 更新 我正在尝试执行以下
  • 如何使用 C# 访问 SQLite?

    我正在尝试使用 C ASP NET 以编程方式连接到我的 Sqlite 数据库 string requete sql SELECT FROM USERS connStr Data Source C LocalFolder FooBar db
  • 马根托。将块插入另一个块而不更改模板代码

    我尝试寻找解决方案但没有结果 我的任务是编写模块 它应该将一些 html 插入现有块中 我注意到 当我使用布局 xml 文件时 我可以将我的块插入到一些参考中 例如
  • 无法让简单的 ParseKit 示例正常工作

    我刚刚发现 ParseKit 但似乎无法让它在一个简单的例子中工作 NSString test FOO BAR NSString grammar get grammar txt file and read it into a string
  • AngularJS - 外部模板

    我正在为 和 的每个内容制作一个模板 因为我有很多数据要显示 但都在相同的结构中 这里是index html div 这是 script js function Ctrl scope scope methods name method1 d
  • Windows 11 权限被拒绝(公钥)

    最近升级到 Windows 11 后 我无法通过 SSH 访问服务器 我不断收到permission denied publickey error 我尝试过重新生成新的公钥ed25519而不是已弃用的rsa我仍然遇到同样的错误 我已经看到了
  • 2D 弹跳公式无法正常工作

    我是 Unity 的新手 我正在尝试创建一个弹跳球 所以我做了很多关于弹跳相关物理的研究 我找到了一个公式 Formula 2 V dot N N V 其中 V 是速度矢量 N 是球弹跳表面的法线 这是我的脚本 using UnityEng