C# 穿墙的人物

C# 穿墙的人物,c#,unity3d,C#,Unity3d,我试图让角色在转弯时随机向左/向右/向前移动,大部分角色都是这样做的,但偶尔他们会穿过墙壁,我不希望这种情况发生。你能在我的代码中看到我遗漏了什么吗 墙壁上有碰撞器,圆圈也是,但是圆圈碰撞器只是一个触发器,因为我希望圆圈能够相互穿过,而不是穿过墙壁 看起来这个角色好像转向了,有时又转向了一堵墙 以下是一个视频示例: 使用UnityEngine; 使用系统集合; 使用System.Collections.Generic; [RequiredComponent(typeof(Rigidbody2D)

我试图让角色在转弯时随机向左/向右/向前移动,大部分角色都是这样做的,但偶尔他们会穿过墙壁,我不希望这种情况发生。你能在我的代码中看到我遗漏了什么吗

墙壁上有碰撞器,圆圈也是,但是圆圈碰撞器只是一个触发器,因为我希望圆圈能够相互穿过,而不是穿过墙壁

看起来这个角色好像转向了,有时又转向了一堵墙

以下是一个视频示例:

使用UnityEngine;
使用系统集合;
使用System.Collections.Generic;
[RequiredComponent(typeof(Rigidbody2D))]
公共阶级特征:单一行为{
公众浮标速度;
受保护的变换frontRaycast、leftRaycast、rightRaycast;
受保护列表lastPossibleDirs=新列表();
受保护的int-lastDir;
受保护的布尔值已更改=false;
前、左、右防护门;
//用于初始化
无效唤醒(){
frontRaycast=transform.FindChild(“frontRaycast”).transform;
leftRaycast=transform.FindChild(“leftRaycast”).transform;
rightRaycast=transform.FindChild(“rightRaycast”).transform;
}
无效更新(){
//测试正面和侧面的墙
forward=Physics2D.Linecast(transform.position,frontRaycast.position,1个元素>0)和(左| |右)以及&lastDir==0){
更改=错误;
}
//左
else if(lastPossibleDirs.Exists(element=>element==1)&&left&&lastDir==1){
更改=错误;
}
//对
else if(lastPossibleDirs.Exists(element=>element==2)&&right&&lastDir==2){
更改=错误;
}
}否则{
交换机(dir){
案例0:
如果(!左| |!右){
旋转(新向量3(0,0,0));
更改=正确;
}
打破
案例1:
旋转(新向量3(0,0,90));
更改=正确;
打破
案例2:
旋转(新向量3(0,0,-90));
更改=正确;
打破
}
lastDir=dir;
lastPossibleDirs=possibleDirs;
}
transform.Translate(Vector2.right*Time.deltaTime*speed);
}
}
下面是角色上检测区域所在位置的屏幕截图


我要做的第一件事是取消选中圆圈上的触发器并利用

Physics2d.IgnoreLayerCollision(circle layer)
Awake()中

Physics2d.IgnoreLayerCollision(circle layer)