C# 碰撞:如何检测物体是否发生碰撞?
我对C#and Unity还很陌生,我试着做一个愤怒的小鸟的克隆人,我被这个问题困住了 我想改变游戏物体的质量(在我的例子中是木块),当鸟飞行并撞击物体时,它应该从质量:1变为质量:0.2C# 碰撞:如何检测物体是否发生碰撞?,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
我创建了两种方法,它以一种奇怪的方式工作,但每次我开始游戏时,质量不是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”?