[LayaAir 2.0]下面这段unity碰撞代码如何用laya2.0物理引擎实现
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag != Constants.TagPlayer)
{
return;
}
float num = 0f;
foreach (ContactPoint2D contactPoint2D in collision.contacts)
{
num += contactPoint2D.normalImpulse;
}
this.AddResistence(collision, this.inflationUtils.GetEnemyResistance() * 0.5f, num);
num = num * (100f - this.inflationUtils.GetEnemyResistance()) / 100f;
this.AddPlayerForce(collision, this.playerController.PlayerUpdates.force, num);
}
private void AddResistence(Collision2D collision, float newImpulsePercent, float impulseForce)
{
Vector3 a = base.transform.position - collision.gameObject.transform.position;
float num = -(newImpulsePercent * impulseForce / 100f);
num = Mathf.Clamp(num, -impulseForce, impulseForce);
a.Normalize();
base.gameObject.GetComponent<Rigidbody2D>().AddForce(a * num, ForceMode2D.Impulse);
}
private void AddPlayerForce(Collision2D collision, float playerStrong, float impulseForce)
{
if (playerStrong == 0f || impulseForce == 0f)
{
return;
}
Vector3 a = base.transform.position - collision.gameObject.transform.position;
float d = Mathf.Sqrt(playerStrong - 1f) * UpdatesAndInflationConstants.UpdateForcePlayerForcePerUpdate * impulseForce;
a.Normalize();
base.gameObject.GetComponent<Rigidbody2D>().AddForce(a * d);
}
{
if (collision.gameObject.tag != Constants.TagPlayer)
{
return;
}
float num = 0f;
foreach (ContactPoint2D contactPoint2D in collision.contacts)
{
num += contactPoint2D.normalImpulse;
}
this.AddResistence(collision, this.inflationUtils.GetEnemyResistance() * 0.5f, num);
num = num * (100f - this.inflationUtils.GetEnemyResistance()) / 100f;
this.AddPlayerForce(collision, this.playerController.PlayerUpdates.force, num);
}
private void AddResistence(Collision2D collision, float newImpulsePercent, float impulseForce)
{
Vector3 a = base.transform.position - collision.gameObject.transform.position;
float num = -(newImpulsePercent * impulseForce / 100f);
num = Mathf.Clamp(num, -impulseForce, impulseForce);
a.Normalize();
base.gameObject.GetComponent<Rigidbody2D>().AddForce(a * num, ForceMode2D.Impulse);
}
private void AddPlayerForce(Collision2D collision, float playerStrong, float impulseForce)
{
if (playerStrong == 0f || impulseForce == 0f)
{
return;
}
Vector3 a = base.transform.position - collision.gameObject.transform.position;
float d = Mathf.Sqrt(playerStrong - 1f) * UpdatesAndInflationConstants.UpdateForcePlayerForcePerUpdate * impulseForce;
a.Normalize();
base.gameObject.GetComponent<Rigidbody2D>().AddForce(a * d);
}
没有找到相关结果
已邀请:
要回复问题请先登录
0 个回复