我试图使我的动画敌人(子对象)在enemieDeath==true时禁用其碰撞器。我写了一个调试。日志显示“Collider.Enabled=true,Collider.Enabled=false,在我的玩家与敌人的孩子(有动画)碰撞后,它会在一个无休止的循环中执行此操作。
这是我正在使用的脚本。
移动脚本
//引用PlayerController脚本
if (playerControllerScript.enemieDeath == true)
{
goblinCollider.enabled = !goblinCollider.enabled;
enemieAnimator.SetBool("IsDead", true);
Debug.Log("Collider.enabled = " + goblinCollider.enabled);
}
}
玩家控制器脚本
void FixedUpdate()
{
int layerMask = 1 << 8;
int layerMaskCollectable = 1 << 9;
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.down), out hit, 1.5f, layerMask))
{
Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.down) * hit.distance, Color.yellow);
Debug.Log("Did Hit");
enemieDeath = true;
//Destroy(hit.transform.gameObject);
playerRb.AddForce(Vector3.up * bounceForce, ForceMode.Impulse);
gameManager.UpdateScore(20);
}
您没有发布第一个代码块的确切执行位置,但从行为中,我只能猜测它位于更新
或固定更新
(或任何其他重复调用的内容)中。
因此,只要设置<code>PlayerController脚本。enemieDeathtotrue
每次切换启用值时都会反复执行。
一个快速的解决办法是宁愿检查和设置
if (playerControllerScript.enemieDeath && goblinCollider.enabled)
{
goblinCollider.enabled = false;
enemieAnimator.SetBool("IsDead", true);
Debug.Log("Collider.enabled = " + goblinCollider.enabled);
}
作为更一般的修复:停止投票检查布尔标志!而是让你的代码事件驱动,并在事件实际发生时禁用碰撞体等。
有e. g.
public class PlayerController : MonoBehaviour
{
public event Action OnEnemyDied;
private void FixedUpdate ()
{
...
if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.down), out hit, 1.5f, layerMask))
{
...
OnEnemyDied?.Invoke();
}
}
...
}
通过这种方式,您可以简单地注册一个回调,该回调只有在调用该事件时才会执行,例如
c# prettyprint-override">public class EnemyMove : MonoBehaviour
{
[SerializeField] private PlayerController playerControllerScript;
private void Awake ()
{
playerControllerScript.OnEnemyDied += OnEnemyDied;
}
private void OnEnemyDied ()
{
if(golblinCollider.enabled)
{
goblinCollider.enabled = false;
enemieAnimator.SetBool("IsDead", true);
Debug.Log("Collider.enabled = " + goblinCollider.enabled);
}
}
...
}
我是IOS开发的新手,目前在didBeginContact方法中遇到一些sprite工具包冲突问题。 如果一个碰撞的物理物体被移走了,我如何摆脱或者停止didBeginContact的运行?例:一颗子弹与两个重叠的敌人相撞。因为子弹击中第一个敌人并被摧毁,所以在第二个敌人上运行的碰撞检查抛出异常,因为子弹不再存在。 我试过检查nil和NSNULL值,但运气不好。我收到的错误代码是“线程1:EXC_
刚开始在pygame中的精灵碰撞。运行此代码时,会弹出一个属性错误,指出“组”对象没有属性 “rect”。我不知道为什么会发生此错误。建议?
我在雪碧套装里做一个复古街机游戏。我是这个框架的新手,所以我每分钟都发现新的东西,但很难解决这个问题,我在过去的几个小时里一直试图解决这个问题。 首先是游戏的屏幕转储和用红色勾勒出的物理实体。 http://i.imgur.com/KcbMVn4.png?1 当你按下拳击手套按钮时,大家伙通过这种方法进行拳击 } 我的碰撞代理如下所示 我这里的问题是,让didBeginContact记录命中的唯一
我有一个豆荚,里面有一些可怕的、有缺陷的软件。Kubernetes很棒的一个原因是,它会在软件崩溃时重新启动,这太棒了。 库伯内特斯是为好软件而设计的,而不是糟糕的软件,所以它在重启吊舱时会以指数级退避。这意味着我必须在崩溃之间等待五分钟才能重启吊舱。 有什么方法可以限制kubernetes的退避策略吗?我想把它改为在再次启动吊舱之前不要等待超过30秒。
我目前正在制作一个平台游戏,我被阻止碰撞...你能帮帮我吗?我实际上添加了一些方块来测试碰撞,在Perso类下创建了一个玩家。我真的需要在那个入口之后制造碰撞,并且必须精心设计重力来让玩家跳跃。这是我的代码:导入pyplay从pygame.locals导入*pygame.init() pygame.quit()
我想做的是,在运行compose up之后,在我的web本地主机中看到一个简单的html文件。但我在localhost的8080 8000 8009端口中看不到任何东西。 当我将yml更改为 上面写着 caner@vegan:~/ideaprojects/combabety$pwd/home/caner/ideaprojects/combabety$ls docker-compose.yml ht