【发布时间】:2018-06-19 05:10:37
【问题描述】:
我想对脚本做两部分:
当玩家退出门触发动作时。
-
当动作触发时,让 npc 面向玩家缓慢旋转并开始向玩家移动。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Playables; public class SpaceshipCutscene : MonoBehaviour { public Transform player; public Transform npc; public float cutsceneDistance = 5f; public float speed; private bool moveNpc = false; // Use this for initialization void Start() { } private void Update() { if (moveNpc) { float travel = Mathf.Abs(speed) * Time.deltaTime; Vector3 direction = (player.position - npc.position).normalized; Quaternion lookrotation = Quaternion.LookRotation(direction); npc.rotation = Quaternion.Slerp(npc.rotation, lookrotation, Time.deltaTime * 5); Vector3 position = npc.position; position = Vector3.MoveTowards(position, player.position, travel); npc.position = position; } } private void OnTriggerExit(Collider other) { if (other.gameObject.name == "Horizontal_Doors_Kit") moveNpc = true; } }
它永远不会到达moveNpc = true; 行。
玩家有一个刚体。 在屏幕截图中,它是播放器检查器。士兵不是玩家! 玩家是第一人称。
士兵应面向玩家缓慢旋转,并在玩家走出门时开始向玩家移动。
脚本附加到 Spaceship GameObject:
门上有一些孩子,这是带有盒子碰撞器的那个:
这就是我在脚本中检查 Horizontal_Doors_Kit 的原因,因为这个门孩子有盒子碰撞器。
但它永远不会到达这条线:
moveNpc = true;
我在这一行使用了一个断点。
【问题讨论】:
-
能否调试 OnTriggerExit 'if' 语句并检查 'name' 属性的值?
-
@DanielMatthews 触发器无法正常工作,它没有进入 OnTriggerExit
-
如果我没记错的话,你要检测碰撞的游戏对象必须有一个刚体。
-
问题似乎至少从我的测试来看是带有 OnTriggerExit 的脚本必须附加到玩家而不是一些空的 GameObject ( Spaceship )。一旦脚本附加到播放器,触发器就会工作。我认为 OnTriggerExit 可以从任何对象触发,但这是我的错误。
-
请写下此评论作为答案,因为您解决了自己的问题。