使用AddForce在与敌人接触后击退玩家
本文关键字:玩家 接触 敌人 AddForce 使用 | 更新日期: 2023-09-27 18:00:43
我正在制作我的第一款Unity游戏。它仍然是原型,无论如何都会非常简单,由一个立方体作为玩家和球体作为敌人组成。
我正试图用AddForce编写一个代码,当玩家与敌人接触时,将其朝着敌人相反的方向打一段相当长的弧线,但我对如何使用AddForce仍然有着原始的理解,似乎根本无法向任何方向施加力。玩家只是穿过敌人。
这是我唯一能一起报废的东西,但显然不够:
if (other.gameObject.tag == "Enemy")
{
playerDead = true;
Rigidbody rigidbody = other.GetComponent<Rigidbody> ();
rigidbody.AddForce (transform.forward * 100);
}
如果有帮助的话,我可以发布一张截图。
根据两个单元的位置,使用更为定制的方向,而不是transform.forward
public float speed = 100;
if (other.gameObject.tag == "Enemy")
{
playerDead = true;
Vector3 direction = (transform.position - other.transform.position).normalized;
other.GetComponent<Rigidbody>().AddForce (direction * speed);
}
编辑:您必须确保刚体位于调用OnCollisionEnter
函数的游戏对象上,它不能仅位于碰撞中涉及的任何对象上。
我不能发表评论,所以我必须做出回答。
你显然设置了isTrigger。确保关闭isTrigger,否则你的玩家将穿过敌人的对撞机。
[SerializeField]
private float speed = 100;
private bool playerDead;
OnCollisionEnter(Collision collision)
{
if(collision.gameObject.tag == "Enemy")
{
playerDead = true;
Vector3 direction = (transform.position - collision.transform.position).normalized;
collision.GetComponent<Rigidbody>().AddForce (direction * speed,0,0);
//AddForce is a vector3 apparently and requires (x,y,z)
// Also note that I'm getting errors with the "collision.GetComponent<>"
// You're going to want to remove "collision"
// I think the smarter approach maybe to declare a public Rigidbody variable ( Up Top )
[SerializeField]
private Rigidbody playerRidg;
playerRidg = GetComponent<Rigidbody>().AddForce(direction * speed,0,0);
}
}
我的解决方案使用coroutine,它切换一个bool"尖峰":
玩家碰撞:
private void OnTriggerEnter2D(Collider2D collision){
if (collision.gameObject.tag == "Spike" )
{
StartCoroutine(Knockback());
}
}
推论:
IEnumerator Knockback()
{
spikes = true;
yield return new WaitForSecondsRealtime(0.3f);
spikes = false;
}
只要尖刺是真的,玩家就会被移动
void FixedUpdate()
{
if (spikes ==true)
{
Vector2 NewPosition = new Vector2(10.0f, 10.0f);
moveCharacter(NewPosition);
}
}