代码里的几个变量都需要在场景中提前创建好并赋值
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Shotobjt : MonoBehaviour
{
// 点击按钮,克隆一个prefab,然后给这个克隆后的对象添加往前方的力
public GameObject originalOBJ;
public GameObject clonePos;
public GameObject FatherTrans;
public float FORCEDIS = 100F;
public void ShotOnePre()
{
Debug.Log("点击成功 开始克隆");
GameObject TempOBJ= GameObject.Instantiate(originalOBJ, clonePos.transform.position, Quaternion.identity, FatherTrans.transform);
TempOBJ.GetComponent<Rigidbody>().AddExplosionForce(FORCEDIS, new Vector3(0, 0, 2), 500F);
Destroy(TempOBJ, 10F);
}
}
官方文档关于爆发力的解释
Rigidbody-AddExplosionForce - Unity 脚本 API向模拟爆炸效果的刚体施加力。https://docs.unity3d.com/cn/current/ScriptReference/Rigidbody.AddExplosionForce.html
Rigidbody.AddExplosionForce
public void AddExplosionForce (float explosionForce, Vector3 explosionPosition, float explosionRadius, float upwardsModifier= 0.0f, ForceMode mode= ForceMode.Force));
参数
explosionForce | 爆炸力(可以根据距离进行修改)。 |
explosionPosition | 表示爆炸波及范围的球体的中心。 |
explosionRadius | 表示爆炸波及范围的球体的半径。 |
upwardsModifier | 调整爆炸的视位,呈现掀起物体的效果。 |
mode | 用于将力施加到其目标的方法。 |
描述
向模拟爆炸效果的刚体施加力。
爆炸被建模为一个在世界空间中具有特定中心位置和半径的球体;通常情况下,球体外的任何对象都不会受到爆炸的影响,力与到中心的距离成反比。但是,如果传递零值作为半径,则不管刚体距离中心多远,都将施加全部的力。
此函数在刚体表面上最接近于 explosionPosition
的点处向对象施加力。该力沿着从 explosionPosition
到刚体表面点的方向作用。如果 explosionPosition
处于刚体内,或是刚体没有活动碰撞体,则使用质心而不是表面上最接近的点。
力的大小取决于 explosionPosition
与施加力的点之间的距离。随着 explosionPosition
与施力点之间的距离增加,施加的实际力会减少。
可以使用 upwardsModifier
修改力的垂直方向。如果此参数大于零,则在刚体表面上最接近于 explosionPosition
的点处施加力,不过会沿 y 轴移动负的 /upwardsModifier/。使用此参数可以实现将对象抛向空中的爆炸效果,这可能比简单地施加向外的力更明显。 力只能施加于处于活动状态的刚体。如果 GameObject 处于非活动状态,则 AddExplosionForce 没有效果。