Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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_Unity5 - Fatal编程技术网

C# 当角色碰撞长方体时,如何以逻辑方式使用布尔变量?

C# 当角色碰撞长方体时,如何以逻辑方式使用布尔变量?,c#,unity3d,unity5,C#,Unity3d,Unity5,当角色第一次碰撞墙时(使用框碰撞器的空游戏对象),它会将输入的值更改为true并旋转角色 但在旋转并到达另一面墙后与另一面墙发生碰撞时,我使用了一个断点,它到达了零件: using System.Collections; using System.Collections.Generic; using UnityEngine; public class BoxCollider : MonoBehaviour { private float degrees = 180f; pub

当角色第一次碰撞墙时(使用框碰撞器的空游戏对象),它会将输入的值更改为true并旋转角色

但在旋转并到达另一面墙后与另一面墙发生碰撞时,我使用了一个断点,它到达了零件:

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

public class BoxCollider : MonoBehaviour {

    private float degrees = 180f;
    public float rotateSpeed = 10f;
    private GameObject character;
    private bool entered = false;


    // Use this for initialization
    void Start ()
    {

    }

    // Update is called once per frame
    void Update ()
    {
        if (entered == true)
        {
            character.transform.rotation = Quaternion.Slerp(character.transform.rotation, Quaternion.Euler(degrees, 0, degrees), rotateSpeed * Time.deltaTime);
        }
    }

    void OnTriggerEnter(Collider c)
    {
        character = c.gameObject;        
        entered = true;
    }
}
但当它进入更新功能时:

void OnTriggerEnter(Collider c)
        {
            character = c.gameObject;        
            entered = true;
        }
我在这一行使用了断点,输入的是false。 不知道为什么

第一次与墙碰撞为真,但第二次与墙碰撞为假

我使用此布尔的原因是仅当碰撞墙(长方体)时才旋转角色

我在地形周围有4个空的游戏对象,其中每一个都有一个盒子碰撞器istrigger被设置为on,并且这个脚本被附加到每个游戏对象上


我不明白为什么第一次输入是真的,第二次输入是假的。

要么OnTriggerEnter不工作(如果你碰到墙,你不想吗?),要么你有其他脚本将
输入设置为假。因为根据您输入的代码,设置为isTrigger
entered
的碰撞器将始终为真。确保没有将脚本附加到许多对象。这也可能给您带来误导性的调试值,因为它在另一个对象上可能为false

同样值得注意的是

注意:仅当其中一个碰撞器还附加了非运动学刚体时,才会发送碰撞事件


或者如果您使用的是CharacterController。如果您有任何代码将“输入的<代码>设置为false”,您应该并且必须包含该代码以获得进一步帮助。

确定您看到/调试的实体正确吗?(在多次使用的对象中,断点如果没有误导性的话,通常会造成混淆。)仍然不起作用。脚本被附加到4个空游戏对象中的每一个,每个游戏对象都添加了框碰撞器组件。因此,脚本在每个游戏对象上有4个位置。第三个personcontroller(1)我有两个第三个personcontroller。我在上面有这样的组件:动画师,刚体,胶囊碰撞器,第三人称用户控制(脚本),第三人称角色(脚本)等等。在刚体中,选中“使用重力”(Use Gravity)(设置为“开”)。每面墙与玩家碰撞后都会使玩家旋转。。。是否确定没有将
输入设置为false的代码?尚未工作。但是我做了一些测试。我看到,当它与检查器中的第一面墙发生碰撞后进入更新函数时,墙上的字符与该字符重合,我看到了“已输入已选中”复选框,因此这是真的。然后旋转后,它移动到第二面墙,我看到这面墙,旁边的复选框是未选中的false,但在第一面墙中仍然选中了true。然后它接触到第二面墙,它的复选框也被选中。所以现在两堵墙都被检查了,这是真的。但是它在第二面墙上没有旋转。为什么它会旋转回来?它应该在第二次碰撞时旋转回来不?为什么不呢?它碰撞的第一面墙旋转180度,然后在下一面墙与第二面墙碰撞时,它应再次旋转180度。回到另一边。我认为这是逻辑。即使它不是这样,为什么它要继续离开地形呢?它至少应该保持在原地行走,因为墙壁应该阻止它继续在地形上移动。
if (entered == true)