为什么我的触发器在场景加载时触发而不是在它们被调用时触发?

问题描述 投票:0回答:0

我正在使用 Unity 2021

我有一个触发函数,它可以旋转我的玩家游戏对象并切换一个全局声明的布尔值,该布尔值存储在停放在层次结构中空槽中的脚本中,独立于所有其他元素。到目前为止它只包括:

using System.Collections;
 using System.Collections.Generic;
 using Unity.VisualScripting;
 using Unity.VisualScripting.FullSerializer;
 using UnityEngine;
 
 public class Orientation : MonoBehaviour
 { public static bool Facing_Right = true; }

Facing_Right 当玩家(在本例中是一架飞机设置为不断向前移动)与触发器碰撞时更改为 false。这个触发器和它的双胞胎是限制玩家在游戏区域的边界。

using UnityEngine;
 public class RightBoundary : MonoBehaviour
 {
     private Vector3 current_rot;
 
     private void Start()
     {
         gameObject.tag = ("Player");
         current_rot = transform.eulerAngles;
     }
 
     void OnTriggerEnter(Collider Player)
     {
         print("Right Boundary Triggered"); 
         Player.transform.Rotate(0, current_rot.y - 180, 0);
         Orientation.Facing_Right = false;
     }
 }   

Facing_Right 在单独的控制器脚本中调用。它分别从右到左反转我的播放器的控制方向(duh)。该脚本功能完美......除了,因为上面的脚本 RightBoundary 在场景加载时被触发(三次),Facing_Right 在与我的播放器接触之前立即将其值设置为 false,在播放开始时控件被反转;但玩家的旋转只会在与触发器碰撞时发生。我有一个与上述脚本相同的副本(它也在 RightBoundary 之前关闭了 3 次)作为运动场另一端的边界,只是它将 Facing_Right 设置回“true”。当现在被逆转的玩家飞入其触发区时,它会按预期工作。没有打嗝。在与 RightBoundary 首次接触后,游戏继续按计划进行。如果愿意,玩家可以整天随着切换控制器布局来回愉快地打乒乓球。

那么,重申一下,为什么 RightBoundary 在场景加载时立即触发,只是将 Facing_Right 的值设置为 false,却不影响玩家速度?

尝试的修复包括:使用公共目标来识别我的游戏对象。注释掉切换 Facing_Right 值的命令。从层次结构中一起删除脚本 Orientation。检查并仔细检查我所有的标签。出于任何可能的原因组合我的脚本以在触发器之前触发 Facing_Right。没有什么。控制台仅打印出 LeftBoundary(另一个触发器)和 RightBoundary 在稳定到常规行为之前分别关闭了 3 次。

unity3d triggers collision-detection
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.