【Unity】两种方式实现弹跳平台/反弹玩家(玩家触发与物体自身触发事件实现蹦床的物理效果)
一、声明
只实现物理反弹的效果,不实现蹦床会有的视觉拉伸效果,请自行找相关代码
二、实现
经过我的实践,我发现要想实现一个平台反弹的效果,要么就选择给player添加一个物理材质(平台加了没用),

但是这样会造成一个问题,如果我们要弄一个3d控制器的游戏,那么没理由让玩家什么情况下都要弹起来吧。
2.1 老手操作
因此参考这篇优质文章https://blog.csdn.net/LLLLL__/article/details/117266549
我们可以给玩家移动代码中添加如下的代码 :
注意:
- 应避免使用
contacts[0],因为它会产生内存垃圾。改用GetContact或GetContacts,即other.GetContact(0).normal
private Vector3 lastDir;private void LateUpdate(){lastDir = rb.velocity;}private void OnCollisionEnter(Collision other){if (other.gameObject.tag == "Wall"){Vector3 reflexAngle = Vector3.Reflect(lastDir, other.contacts[0].normal);rb.velocity = reflexAngle.normalized * lastDir.magnitude;}}
2.2 新手操作
下面的选择则是挂载到我们的平台上。
注意:
playerRigidbody是在OnCollisionEnter方法中声明的,因此它的作用范围仅限于OnCollisionEnter方法,这会导致编译错误。
要解决这个问题,可以将playerRigidbody声明为类级别的字段,以便在整个类中都能访问它。
同时,还需要在OnCollisionEnter方法中获取到playerRigidbody。
using UnityEngine;public class Bounch_Platform : MonoBehaviour
{private Vector3 lastDir;private Rigidbody playerRigidbody; // 声明为类级别字段private void OnCollisionEnter(Collision other){// 检测是否碰到了玩家(假设玩家有一个标签为 "Player")if (other.gameObject.CompareTag("Player")){playerRigidbody = other.gameObject.GetComponent<Rigidbody>(); // 获取玩家的刚体if (playerRigidbody != null){Vector3 reflexAngle = Vector3.Reflect(lastDir, other.GetContact(0).normal);// 应用反射角度来实现弹跳playerRigidbody.velocity = reflexAngle.normalized * lastDir.magnitude;}}}private void LateUpdate(){if (playerRigidbody != null){lastDir = playerRigidbody.velocity;}}
}
三、额外注意事项
3.1 使用触发事件的问题
- 注意碰撞体
Collider和碰撞Collision不是同一个东西,有些人可能会考虑使用触发事件(假设已经点了is trigger),去完成这个反弹效果。 - 但是请注意了,如果在unity中的实现,如果分开碰撞体和刚体组件就会造成这个触发问题(如下图)

Tip:
我们实现物理移动,rigidbody组件是一定要选择跟我们的脚本挂载到同一个游戏对象,碰撞体在什么位置反而无所谓,只是不要想着可以通过GetComponentInChildren或GetComponentInParent取巧解决上面的结构问题,这样会造成不必要的工作量。
3.2 老手和新手操作的区别点
游戏是由事件驱动的,比如OnCollisionEnter和OnTriggerEnter,对涉及到碰撞的事件可以通过以下两种方法实现:
- 玩家触发,通过对tag的识别,更好的理解就是:我碰到小明,所以小明叫了我
- 物体自身触发事件,也是对tag的识别,但是由物体自己主导,可以理解成:小明被我碰到了,所以叫了我
老手的操作并不代表这一定好,只是这样更适合更加小型的项目,更方便我们聚合tag在一起,而如果我们选择把一个物体当成一个模块,意味着可以复用这些类型的预制体。
一旦使用老手的操作,如果遇到需要改动或者弃用某些对象,可能会影响到相关的事件的判断,而且unity也对tags改名操作和弃用操作也不智能,选择新手的方式无疑更好。
四、最终效果

相关文章:
【Unity】两种方式实现弹跳平台/反弹玩家(玩家触发与物体自身触发事件实现蹦床的物理效果)
一、声明 只实现物理反弹的效果,不实现蹦床会有的视觉拉伸效果,请自行找相关代码 二、实现 经过我的实践,我发现要想实现一个平台反弹的效果,要么就选择给player添加一个物理材质(平台加了没用)࿰…...
python开发幸运水果抽奖大转盘
概述 当我女朋友跟我说要吃水果,又不知道吃啥水果时候,她以为难为到我了,有啥事难为到程序员的呢! 今天用python利用第三方tkinterthreadingtime库开发一个幸运水果抽奖大转盘!抽到啥吃啥 详细 老规矩!咱…...
【CMU15-445 Part-16】Concurrency Control Theory
Part16-Concurrency Control Theory 架构概念 Transcations txn就是通过在数据库系统中执行一系列操作(sql queries)来执行某种更高级的功能(应用程序所执行的功能)。 Transcations in SQL 一个新的事务开始 with BEGIN,txn结束with COMM…...
软件设计模式系列之二十五——访问者模式
访问者模式(Visitor Pattern)是一种强大的行为型设计模式,它允许你在不改变被访问对象的类的前提下,定义新的操作和行为。本文将详细介绍访问者模式,包括其定义、举例说明、结构、实现步骤、Java代码实现、典型应用场景…...
国庆看坚如磐石
坚如磐石上映了,可以在爱奇艺观看。 而博主在使用蓝牙耳机连接电脑的过程中,发现没有蓝牙开启选项,并且在服务的设备管理器中也没有找到,很明显这是缺少驱动导致的,因此便去联想官方网站下载对应的驱动。 这里可以输入…...
代码随想录Day59 | 647. 回文子串 | 516. 最长回文子序列
647. 回文子串 class Solution { public:int countSubstrings(string s) {int sum0;int ns.size();vector<vector<int>> f(n1,vector<int>(n1,0));//表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串。初始值为0.for(int i n…...
为什么InnoDB选择B+树而不是红黑树作为索引结构?
在数据库管理系统中,索引结构的选择对于数据库的性能和效率至关重要。MySQL的InnoDB存储引擎是一个广泛使用的数据库引擎,它选择了B树作为索引结构,而不是像红黑树那样的其他数据结构。本文将探讨为什么InnoDB选择B树,并解释B树与…...
【c++_containers】10分钟带你学会list
前言 链表作为一个像是用“链子”链接起来的容器,在数据的存储等方面极为便捷。虽然单链表单独在实际的应用中没用什么作用,但是当他可以结合其他结构,比如哈希桶之类的。不过今天学习的list其实是一个带头双向链表。 言归正传,让…...
LeetCode 0714. 买卖股票的最佳时机含手续费
【LetMeFly】714.买卖股票的最佳时机含手续费 力扣题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/ 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 ;整数 fee 代表了交易股…...
cartographer-(0)-ubuntu(20.04)-环境安装
1.安装 ROS wiki.ros.org 1.1修改镜像源: 到网站上找与操作系统相匹配的镜像源 ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb htt…...
MIT 6.S081学习笔记(第二章)
〇、前言 本文主要完成MIT 6.S081 实验二:system call 一、Using gdb (easy) Question requirements In many cases, print statements will be sufficient to debug your kernel, but sometimes being able to single step through some assembly code or inspe…...
L958. 二叉树的完全性检验 java
从1开始当下标,最后节点下标节点总数?true:false; /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { …...
阿里云对象存储OSS SDK的使用
官方文档 https://help.aliyun.com/zh/oss/developer-reference/java 准备工作 windows安装好JDK,这里使用JDK1.8为例 windows安装好IDEA,这里使用IDEA2022 登录阿里云控制台,通过免费试用OSS或开通OSS 步骤 配置访问凭证 有临时和长期…...
二、互联网技术——网络协议
文章目录 一、OSI与TCP/IP参考模型二、TCP/IP参考模型各层功能三、TCP/IP参考模型与对应协议四、常用协议与功能五、常用协议端口 一、OSI与TCP/IP参考模型 二、TCP/IP参考模型各层功能 三、TCP/IP参考模型与对应协议 例题:TCP/IP模型包含四个层次,由上至…...
初赛错题集
MPEG属于视频文件格式. UNIX,Mac OS属于操作系统. 中国计算机协会成立于()年。 A. 1961 B. 1962 C. 1971 D. 1972 Ans:B 五个本质不同的点在没有重边或者自环的情况下,组成不同的无向图的个数是: A. 10 B. 1024 C. 15 D. 120 Ans:B 解析&…...
Java Thread类详解
🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,…...
3_使用传统CNN网络训练图像分类模型
使用传统CNN网络训练图像分类模型 1. MNIST 首先,定义一下超参数等 import torch# dataset input_shape = 28 num_classes = 10# hyper batch_size = 64 num_epochs = 5 learning_rate = 1e-3# gpu device = torch.device(cuda...
Java 创建线程的方法
🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,…...
基于安卓android微信小程序的旅游app系统
项目介绍 随着人民生活水平的提高,旅游业已经越来越大众化,而旅游业的核心是信息,不论是对旅游管理部门、对旅游企业,或是对旅游者而言,有效的获取旅游信息,都显得特别重要.自助定制游将使旅游相关信息管理工作规范化、信息化、程序化,提供旅游景点、旅游线路,旅游新闻等服务本…...
C++设计模式-单件(Singleton)
目录 C设计模式-单件(Singleton) 一、意图 二、适用性 三、结构 四、参与者 五、代码 C设计模式-单件(Singleton) 一、意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 二、适用性 当类只能有一…...
SDMatte镜像结构详解:/opt/sdmatte-web目录布局与模型路径规范说明
SDMatte镜像结构详解:/opt/sdmatte-web目录布局与模型路径规范说明 1. 镜像概述 SDMatte 是一款面向高质量图像抠图场景的AI模型,特别适合处理以下任务: 商品图主体分离透明物体提取(如玻璃器皿、薄纱等)复杂边缘精…...
深度学习 三次浪潮、三大驱动力与神经科学的恩怨(二)
1. 一个领域,多个名字 很多人以为"深度学习"是一个全新的领域。事实上,它的历史可以追溯到 20 世纪 40 年代——只不过在不同时期,它被叫过完全不同的名字: 1940s-1960s:被称为控制论(Cybernetic…...
BGE嵌入模型突破指南:解锁多模态检索增强的实战路径
BGE嵌入模型突破指南:解锁多模态检索增强的实战路径 【免费下载链接】FlagEmbedding Dense Retrieval and Retrieval-augmented LLMs 项目地址: https://gitcode.com/GitHub_Trending/fl/FlagEmbedding 在信息爆炸的时代,如何让机器精准理解人类语…...
GitHub访问加速终极指南:5分钟告别龟速访问的完整解决方案
GitHub访问加速终极指南:5分钟告别龟速访问的完整解决方案 【免费下载链接】fetch-github-hosts 🌏 同步github的hosts工具,支持多平台的图形化和命令行,内置客户端和服务端两种模式~ | Synchronize GitHub hosts tool, support m…...
Surface硬盘不够用?教你用cfadisk把SD卡变本地硬盘(附详细图文)
Surface硬盘扩容实战:用cfadisk将SD卡完美变身本地存储 每次打开Surface的存储设置,看到那根触目惊心的红色容量条,相信不少用户都会感到焦虑。作为微软旗下最受欢迎的移动生产力工具,Surface系列在便携性和性能上表现出色&#x…...
Qwen3.5-4B-Claude-Opus企业实操:数据治理元数据血缘关系推理补全工具
Qwen3.5-4B-Claude-Opus企业实操:数据治理元数据血缘关系推理补全工具 1. 平台概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是基于Qwen3.5-4B架构的推理蒸馏模型,专门针对企业级数据治理场景中的元数据血缘关系分析任务进行了优化。该模…...
从555到正弦波:手把手教你用立创EDA仿真+打样一个2KHz波形发生器(附完整工程)
从555到正弦波:立创EDA全流程打造2KHz波形发生器实战指南 在电子设计领域,波形发生器是最基础却又最考验设计功底的经典项目之一。想象一下,当你亲手设计的电路板输出完美的正弦波时,那种成就感绝非购买现成模块可比。本文将带你用…...
网页录制技术革命:为什么rrweb比传统录屏更强大?
网页录制技术革命:为什么rrweb比传统录屏更强大? 【免费下载链接】rrweb record and replay the web 项目地址: https://gitcode.com/gh_mirrors/rr/rrweb 在当今数字化时代,网页录制技术已经成为用户体验分析、产品演示、错误调试和在…...
Sqoop1 vs Sqoop2:架构之争与选型指南
Sqoop1 vs Sqoop2:架构之争与选型指南1. 引言:两个版本,一个困惑2. 核心差异:从架构到功能的全面对比2.1 架构对比:客户端 vs 客户端-服务器2.2 功能特性详细对比2.3 安全性对比:Sqoop2的核心优势3. 为什么…...
【PAT甲级真题】- PAT Judge (25)
题目来源 PAT Judge (25) 题目描述点击链接自行查看 注意点: 排序:先按总分再按解决题目数再按id 思路简介 思路很简单,直接模拟即可 但是坑倒是很多 主要是要区分编译没过和过了但是得 0 分 方案: 初始化时分数为 -2 编译没…...
