我有一个标记为“Bouncy object”的对象,它会让我的玩家碰撞;它可以工作但是在碰撞之后,我的玩家就像被拖回到被标记为“Bouncy对象”的对象,然后像循环那样再次做同样的事情。我使用的代码是:
void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "Bouncy object")
GetComponent<Rigidbody2D>().AddForce(transform.right * 38, ForceMode2D.Impulse);
}
然后我将玩家Rigidbody上的阻力设置为:1.49。我怎么能阻止这种情况发生?我想要的是标记为“Bouncy object”的对象将我的玩家推入碰撞(触发器)然后冻结Rigidbody2D 2秒钟,然后允许我控制我的玩家。
答案 0 :(得分:0)
这是您想要的代码。我刚刚测试过。
如果Cube与Block发生碰撞,它会反弹0.1秒并冻结1秒。
关键是'-GetComponent()。speedocity'。
Here is the screenshot of editor.
public class PlayerController : MonoBehaviour {
public float force = 10f;
float speed = 5f;
float freezeTime = 1f;
bool isCollide = false;
void FixedUpdate ()
{
float dirX = Input.GetAxis ("Horizontal");
float dirY = Input.GetAxis ("Vertical");
Vector3 movement = new Vector2 (dirX, dirY);
if(isCollide==false)
GetComponent<Rigidbody2D> ().velocity = movement * speed;
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "Boundary") {
isCollide = true;
GetComponent<Rigidbody2D> ().AddForce (-GetComponent<Rigidbody2D> ().velocity * force, ForceMode2D.Impulse);
Invoke("StartFreeze", 0.1f);
}
}
void StartFreeze()
{
GetComponent<Rigidbody2D> ().constraints = RigidbodyConstraints2D.FreezeAll;
Invoke("ExitFreeze", freezeTime);
}
void ExitFreeze()
{
GetComponent<Rigidbody2D> ().constraints = RigidbodyConstraints2D.None;
isCollide = false;
}
}