c# - 如何使 2d 平台在 unity2D 中表现得像钢琴键?
问题描述
我正在统一制作一个 2D 游戏,其中我的角色很小,并且我有一个角色沿着钢琴行走的关卡。我的问题是如何为钢琴键编写物理代码,其中我的角色落在它上面的速度会影响它下降的程度,此外,当我的角色离开所述键时,它会回到未按下的正常位置。
- 我尝试将这个问题视为弹簧体,尝试了一些使用弹簧接头 2d 组件的解决方案,但它超出了位置,也不允许我将它的刚体作为运动学,这将是理想的。
- 我还尝试使用胡克方程中的弹簧力和一些附加参数对弹簧物理进行编码,但没有成功。
可以预料的是,字符落在键上,它会下降一点,然后在字符离开键后又上升。
感谢您的所有回答,也欢迎问题格式提示!
解决方案
好的,让我们定义问题。当玩家踩到它时,我们希望将对象移动一定的垂直距离。我们可以通过检查刚体的 OnCollisionEnter2D() 事件来检测。当检测到碰撞时,您可以访问玩家对象的质量变量或任何定义的变量。
然后使用这个定义的重量向下移动钢琴键。如果没有发生碰撞,我们将键移回原来的 y 位置。
重量可以是附加到玩家对象的变量或刚体质量变量。移动钥匙的部分可以随心所欲地发生。
通过:Transform.Translate Rigidbody.AddForce 等...
所以如果 Collision.GameObject.Name == "YourPlayerName" && transform.position.y > lowerLimit 访问你的 RigidBody 组件并使用 AddForce 函数。有点像 blablabla.AddForce(new Vector2(0,-(Collision.rigidbody.mass * someRandomFactorYouWantToMultiplywith))
否则向上移动钢琴直到达到原来的高度。
我在我的手机上写这个格式希望它有帮助:)
推荐阅读
- autohotkey - autohotkeys 在执行 alt+tab 时将 Caps + ijkl 映射到箭头键
- c - 在我按下键盘上的某个键后,如何让我的程序执行特定的操作?
- javascript - 如何阻止加载脚本或从 CDN 动态替换它们?
- python - 如何在 docker 容器上安装 python
- docker - 将fabric8io docker-maven-plugin与podman一起使用,mvn docker:build会导致IO-Exception
- java - Android Studio 布局验证错误?
- angular - 在 Angular 中定期调用健康检查 API
- javascript - Discord.js - setNickname 没有足够的权限
- python - 在 NLP 中合并相关词
- google-sheets - 如何在整个工作表中找到具有特定值的单元格