我在地板上画了一个圆圈。应检测通过该圆圈的所有内容。以下代码正在运行:
void Update () {
RaycastHit hit;
Ray landingRay = new Ray (transform.position, Vector3.up);
// This debug does not seem to work:
Debug.DrawRay (transform.position, Vector3.up * 50);
if( Physics.Raycast(landingRay, out hit) ){
Debug.Log("raycast is working!");
}
}
但是,我认为RayCast仅位于我绘制的Sprite的中心(1),因此它不会覆盖整个圆圈(2):
有没有最佳方式来执行此操作?或者我应该在同一个脚本中编写几个RayCast?
答案 0 :(得分:2)
我建议只在球体上放置一个球体或胶囊对撞机(在触发模式下)并在OnTriggerEnter()
处理碰撞。这应该比光线投射更有效。
您可以在此处查看有关该主题的official video tutorial。
答案 1 :(得分:1)
您要做的是SphereCast
RaycastHit hit;
float radius = 5f;
float distance = 50f;
Ray landingRay = new Ray (transform.position, Vector3.up);
if (Physics.SphereCast(landingRay, radius, out hit, distance)
{
// Do something
}
答案 2 :(得分:0)
每帧发射许多光线投影并不是最佳选择。您可以做的是使用圆的中心,并使用Physics2D.OverlapCircleAll或Physics2D.OverlapCircleAllNonAlloc来检查哪些碰撞器在圆圈范围内。
实施例
将CircleDetector.cs附加到具有圆形精灵的游戏对象
public class CircleDetector : MonoBehaviour {
public float radius = 2; //This is the radius of the circle Sprite
void Update () {
var affectedColliders = Physics2D.OverlapCircleAll(transform.position, radius);
if(affectedColliders.Length > 0) {
Debug.Log(string.Format("There were {0} Game Objects within the circle", new object[] { affectedColliders.Length }));
}
}
}