Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.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
C# 碰撞:如何检测物体是否发生碰撞?_C#_Unity3d_Game Physics_Physics - Fatal编程技术网

C# 碰撞:如何检测物体是否发生碰撞?

C# 碰撞:如何检测物体是否发生碰撞?,c#,unity3d,game-physics,physics,C#,Unity3d,Game Physics,Physics,我对C#and Unity还很陌生,我试着做一个愤怒的小鸟的克隆人,我被这个问题困住了 我想改变游戏物体的质量(在我的例子中是木块),当鸟飞行并撞击物体时,它应该从质量:1变为质量:0.2 我创建了两种方法,它以一种奇怪的方式工作,但每次我开始游戏时,质量不是1,而是0.2。只有当鸟撞到木块时,它才会改变 这是我的密码: using System.Collections; using System.Collections.Generic; using UnityEngine; public c

我对C#and Unity还很陌生,我试着做一个愤怒的小鸟的克隆人,我被这个问题困住了

我想改变游戏物体的质量(在我的例子中是木块),当鸟飞行并撞击物体时,它应该从质量:1变为质量:0.2
我创建了两种方法,它以一种奇怪的方式工作,但每次我开始游戏时,质量不是1,而是0.2。只有当鸟撞到木块时,它才会改变

这是我的密码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Wall : MonoBehaviour

private float wallMass;
private bool isHit;
private Rigidbody2D rb;

void Start()
{
    rb = gameObject.GetComponent<Rigidbody2D>();
    wallMass = 1.0f;
    isHit = false;
}

void Update()
{
    CollisionOn(isHit);
}

private void CollisionOn(bool isTrue)
{
    rb.GetComponent<Rigidbody2D>().mass = wallMass;
    if (isTrue)
    {
        DecreaseMass();
    }
}

void DecreaseMass()
{
    rb.GetComponent<Rigidbody2D>().mass = 0.2f;
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类墙:单一行为
私人浮墙;
私人住宅;
私有刚体2d rb;
void Start()
{
rb=gameObject.GetComponent();
壁质量=1.0f;
isHit=假;
}
无效更新()
{
碰撞(isHit);
}
私人无效冲突(布尔伊斯特鲁)
{
rb.GetComponent().mass=墙质量;
如果(是真的)
{
降低质量();
}
}
void decreatemass()
{
rb.GetComponent().mass=0.2f;
}

将这两个事件用于连接到方框的MonoBehavior上

发生碰撞时调用

void OnCollisionEnter2D(Collision2D col)
{
   GetComponent<Rigidbody2D>().mass = wallMass;
}
无效OnCollisionInter2D(Collision2D列)
{
GetComponent().mass=墙质量;
}
碰撞结束时的方式相同

void OnCollisionExit2D(Collision2D other)
{
    GetComponent<Rigidbody2D>().mass = 0.2f;
}
无效OnCollisionExit2D(碰撞2D其他)
{
GetComponent()。质量=0.2f;
}

通常,在执行协作时,您必须在每次更新/游戏勾选时将每个对象与其他对象进行检查。当然,可能是Unity有一些automagic从您那里获取了这些信息,而是为您提供了一个事件或对象上的可轮询属性,以检查谁与谁合并。“但每次我开始游戏时,质量都不是1,而是0.2。”请您重写一下好吗?我真的不知道你想说什么。您在哪里将
isHit
设置为true?而
CollisionOn
中的参数不应命名为
isTrue
,因为我猜它也可能是false。如果发生碰撞,您不需要检查每个帧。Unity提供发生碰撞时触发的事件。检查您是否只使用了“OnCollisionCenter”和“OnCollisionExit”?