Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity:如何创建击退向量2方向脚本(c#)_C#_Unity3d_Bounce - Fatal编程技术网

Unity:如何创建击退向量2方向脚本(c#)

Unity:如何创建击退向量2方向脚本(c#),c#,unity3d,bounce,C#,Unity3d,Bounce,我有一个自上而下的游戏,当我的玩家与我的物体碰撞时,我想在上面创建一个击退效果。我想使用OnTiggerEnter2D创建一个回击脚本。我希望击退脚本看起来像。我该怎么做?(对不起,我有点糊涂) ()嘿,我就是这样让它工作的 首先,这里有一个基本的移动脚本: public class Move : MonoBehaviour { public Rigidbody2D rig; public float speed = 0.2f; public float maxSpeed

我有一个自上而下的游戏,当我的玩家与我的物体碰撞时,我想在上面创建一个击退效果。我想使用OnTiggerEnter2D创建一个回击脚本。我希望击退脚本看起来像。我该怎么做?(对不起,我有点糊涂)


()

嘿,我就是这样让它工作的

首先,这里有一个基本的移动脚本:

public class Move : MonoBehaviour {
    public Rigidbody2D rig;
    public float speed = 0.2f;
    public float maxSpeed = 5f;
    void FixedUpdate () 
    {
        Vector2 vel = new Vector2 ( Input.GetAxis("Horizontal") /5f, Input.GetAxis("Vertical")/5f);
        vel.Normalize ();
        if (vel.sqrMagnitude > 0f && rig.velocity.sqrMagnitude < maxSpeed) {
            rig.AddForce (vel * speed, ForceMode2D.Impulse);
        } else {
            rig.velocity = Vector2.zero;
        }
    }
}
公共类移动:单一行为{
公共刚体2D钻机;
公共浮子速度=0.2f;
公共浮点数maxSpeed=5f;
无效固定更新()
{
Vector2 vel=新的Vector2(Input.GetAxis(“水平”)/5f,Input.GetAxis(“垂直”)/5f);
标准化();
如果(vel.sqrMagnitude>0f&&rig.velocity.sqrMagnitude
然后是弹跳脚本:

public class CollideCtrl : MonoBehaviour 
{
    public float speed = 500f;
    void OnCollisionEnter2D (Collision2D col) {
        if(col.gameObject.CompareTag("Player")){
            Debug.Log("Col");
            Rigidbody2D rig = col.gameObject.GetComponent<Rigidbody2D>();
            if(rig == null) { return;}
            Vector2 velocity = rig.velocity;
            rig.AddForce( -velocity * speed); 
        }
    }
}
公共类:单一行为
{
公共浮子速度=500f;
空心OnCollisionInter2D(碰撞2D列){
if(col.gameObject.CompareTag(“玩家”)){
Debug.Log(“Col”);
Rigidbody2D rig=col.gameObject.GetComponent();
如果(rig==null){return;}
矢量2速度=钻机速度;
钻机加力(-velocity*speed);
}
}
}
现在需要调整这些值。效果很好,但不符合我的口味。我邀请任何人用他们的建议或自己的答案来改进这个答案,因为这是一个快速的方法,但不是一个完美的方法。这可能会给你一些线索


玩家需要一个玩家标签,没有重力的Rigidbody2D和一个2D碰撞框。要与之碰撞的长方体需要一个BoxCollider2D,isTrigger为false。如果需要将其作为触发器,请更改碰撞方法的名称和参数。

您可以尝试使用物理材料进行此操作,文档如下:


这似乎正是你要找的

谢谢你的回复,但是移动脚本是用来做什么的,我应该把它附加到什么上呢。它控制着基本的运动。我建议创建一个简单的原型关卡,直到你把它做好,然后转移到你的主要场景。谢谢你,我刚刚尝试过,但没有力量把我的播放器推回。这就像一个物体与另一个物体发生碰撞,而另一个物体与另一个物体发生碰撞,除了刚体的震动,什么都没有发生。有足够的力吗?试着把速度变量调大一些。我先把速度变量调大到1500,然后调大到10000。但是它仍然做同样的事情你能使用OnCollisionInter2D吗?谢谢,但我做的是2D而不是3D,所以我可以使用物理你也可以使用2D中的物理材料