【问题标题】:How to add different gravity on spawning objects?如何在生成对象上添加不同的重力?
【发布时间】:2018-12-12 00:44:43
【问题描述】:

我正在做一个项目,我想在按下按钮“Q”时创建一个加电效果,我有动画工作和角色,我还有我想要生成的播放器周围的生成对象(见下图) 我的问题是如何在每块岩石(产卵对象)上添加不同的重力。

这是我目前正在使用的脚本。

/* Public Variables Declaration */
public Transform spawn_LocationForSmall;
public Transform spawn_LocationForMedium;
public Transform spawn_LocationForLarge;
public GameObject smallRock_Prefab;
public GameObject mediumRock_Prefab;
public GameObject largeRock_Prefab;

/* Private Variables Declaration */
private GameObject[] smallRocks_List;
private float posX, posY, posZ;

private bool smallCount = false;
private bool mediumCount = false;
private bool largeCount = false;

private bool small_CheckPos = false;
private bool medium_CheckPos = false;
private bool large_CheckPos = false;




void Start() {

    //smallRocks_List = GameObject.FindGameObjectsWithTag("smallRock");

    Create_Small_Rocks();

    Create_Medium_Rocks();

    Create_Large_Rocks();


}

 private void Create_Small_Rocks(){

    for(int i=0; i<=20; i++){

        small_CheckPos = false;
        posX = this.transform.position.x + Random.Range(-3.0f, 3.0f);
        posY = this.transform.position.y + Random.Range(-3.0f, 3.0f);
        posZ = this.transform.position.z + Random.Range(-3.0f, 3.0f);

        if(posX > 3f && posY > 3f){

            small_CheckPos = true;
        }

        if (small_CheckPos == true) {

            Vector3 newPos = new Vector3(posX, posY, posZ);

            GameObject createdObject = GameObject.Instantiate(smallRock_Prefab, 
                newPos, spawn_LocationForSmall.rotation) as GameObject;

            createdObject.transform.parent = spawn_LocationForSmall.transform;
        }

    }
    smallCount = true;
}
 /* the other two functions are similar to this */

【问题讨论】:

  • 注意:要检查标签是否适合您的问题,您可以点击标签read the description,然后点击“更多信息”。
  • 为什么每块岩石需要不同的重力?
  • 实际上,岩石的重力并不比其他岩石大,但它们的质量确实更大,但您可以更改
  • @LoizosVasileiou 是的,在刚体上改变它的质量,无论是在预制件中还是通过代码。

标签: c# unity3d random rigid-bodies


【解决方案1】:

我真的不知道你是否可以改变每个人的重力,但你可以改变这些东西:

质量:
在刚体组件中,顶部有一个“质量”组件。正如 Unity 文档中所说:“质量较大的物体在碰撞时会更多地推动质量较小的物体。想想一辆大卡车,撞上一辆小汽车。”但是,它不会改变物体下落的速度。

物理材料:
在 Collider 组件中,您应该会看到名为“Material”的东西。您可以创建新的物理材质并随机编辑它们,以使岩石与表面之间的摩擦力更高或更低,从而改变岩石的弹性。

恒力:
如果您希望某些物体下落得更快,您可能需要使用此组件。我个人以前从未使用过它,但它看起来很适合您的问题。您可以使用此组件向对象添加恒定的力,因此如果您在岩石上添加一些向下的力,它应该可以帮助它们更快地下降。

如果有任何帮助,请告诉我。

【讨论】:

  • 有助于理解物理学在 Unity 中的工作原理。谢谢@Qedized
【解决方案2】:

搜索粒子系统:

1) https://docs.unity3d.com/ScriptReference/ParticleSystem.html

2) https://www.youtube.com/watch?v=FEA1wTMJAR0&t=536s

3)https://www.youtube.com/watch?v=xenW67bXTgM

  • 它允许您上传很酷的效果甚至预制件作为克隆对象(在本例中为岩石/小行星)。它还能够控制产卵速度/数量/速度/(随机)大小/物理(重力)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多