如何在 Unity 2D 中制作软体弹跳器?

Posted

技术标签:

【中文标题】如何在 Unity 2D 中制作软体弹跳器?【英文标题】:How to make a softbody bouncier in Unity 2D? 【发布时间】:2021-10-03 11:51:25 【问题描述】:

我在 Unity 中制作了一个果冻软体,我试图让它更有弹性(这样当一个物体落在它上面后,它会反弹到比正常情况更高的空气中),但我似乎不知道出来怎么做。我试图改变要反弹的物体的每一个方面以及我能找到的果冻本身,例如弹簧关节频率和软体的刚体组件,但没有什么能让它从果冻中反弹得更多。我遵循了本教程:https://www.youtube.com/watch?v=3avaX00MhYc,但制作了一个中心骨骼,而不是使用对面的骨骼。下面是一些不同方面的截图:https://imgur.com/a/KBuvRPk 过去一周这一直困扰着我,所以我会很感激任何想法。

【问题讨论】:

您是否尝试过使用物理材料? Physics Material 3dPhysics Material 2d @hijinxbassist 是的,没有任何改变。发生的情况是当一个对象与软体交互时,它会下沉一点然后反弹回来,但我想增加它下沉并反弹回来的量,我不知道该怎么做。 【参考方案1】:

我已经想通了,结果我只需要向对象添加力以使 OnCollisionExit 与软体反弹,并使用对象向下 OnCollisionEnter 向软体骨骼添加力,以便它仍然保持效果。如果其他人想在他们的游戏中实现类似的东西,这是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class jellyBounce : MonoBehaviour

    public int speedBounce = 500;
    public int speedInward = 500;

     void OnCollisionEnter2D(Collision2D other)
     
         if (other.gameObject.tag == "BounceMe")
         
             speedInward = 300;
             gameObject.GetComponent<Rigidbody2D>  ().AddForce(Vector2.down*speedInward);
         
         else if (other.gameObject.tag == "AlreadyBouncy")
         
             speedInward = 50;
             gameObject.GetComponent<Rigidbody2D>().AddForce(Vector2.down*speedInward);
         

     

     void OnCollisionExit2D(Collision2D other)
     
         if (other.gameObject.tag == "BounceMe")
         
             speedBounce = 600;
             other.gameObject.GetComponent<Rigidbody2D>().AddForce(Vector2.up*speedBounce);
         
         else if (other.gameObject.tag == "AlreadyBouncy")
         
             speedBounce = 100;
             other.gameObject.GetComponent<Rigidbody2D>().AddForce(Vector2.up*speedBounce);
         

     

【讨论】:

以上是关于如何在 Unity 2D 中制作软体弹跳器?的主要内容,如果未能解决你的问题,请参考以下文章

Unity 2D C#如何在点击时制作面向对象的坐标

求教如何在Unity中为2D游戏制作技能特效

Unity2D如何制作一个炮台追踪主角发射子弹

如何在 Unity 中从 3D 对象中获取 2D 视图/纹理

Unity 2D 轨迹渲染器碰撞

如何在 Unity3d 中最好地为 2D 精灵设置动画? [关闭]