gpt4 book ai didi

C# - Unity 因此代码而崩溃 - 基于 GameObject 标记创建变换数组

转载 作者:行者123 更新时间:2023-11-30 21:44:51 25 4
gpt4 key购买 nike

我在 3D 环境中工作,这是一栋有 16 个房间的房子。在每个房间里,我都放置了一个看不见的立方体,上面有一个名为“RoomsToScanTag”的标签。我正在使用一个名为 Behavior Designer 的 Assets ,在我的检查器中我已经给出了要查找的标记名(在本例中为“RoomsToScanTag”)。有了这个标记名,我希望机器人先去 room1,然后继续去 room2,直到 room16。

这是我的代码

using UnityEngine;
using BehaviorDesigner.Runtime;
using BehaviorDesigner.Runtime.Tasks;

public class MoveTowardsNew : Action
{
private Transform[] roomsToScanHAHA;
public string targetTagRooms;
public Transform targetyo;
int i = 0;
int controlNumber = 0;

public override void OnAwake()
{
var targets = GameObject.FindGameObjectsWithTag (targetTagRooms);
roomsToScanHAHA = new Transform[targets.Length];
for (int i = 0; i < targets.Length; i++) {
roomsToScanHAHA [i] = targets [i].transform;
}
}

public override TaskStatus OnUpdate()
{
while (controlNumber < roomsToScanHAHA.Length)
{
targetyo = roomsToScanHAHA [controlNumber];
if (Vector3.SqrMagnitude (transform.position - targetyo.position) < 0.5f)
{
if (controlNumber < roomsToScanHAHA.Length) {
controlNumber++;
}
return TaskStatus.Success;
}
}
NavMeshAgent agent = GetComponent<NavMeshAgent> ();
agent.destination = targetyo.position;
return TaskStatus.Running;
}
}

我的问题

Unity crashes... 和这段代码有关,我想不通。任何人都知道出了什么问题吗?

这是我正在处理的图像:

Example of setup in Behavior Designer

提前致谢!

最佳答案

像往常一样,它是 while loop这不是终止:

    while (controlNumber < roomsToScanHAHA.Length)
{
targetyo = roomsToScanHAHA [controlNumber];
if (Vector3.SqrMagnitude (transform.position - targetyo.position) < 0.5f)
{
if (controlNumber < roomsToScanHAHA.Length) {
controlNumber++;
}
return TaskStatus.Success;
}
}

第一次运行:controlNumber = 0;

假设数组中的第一个元素 roomsToScanHAHA不符合条件:(Vector3.SqrMagnitude (transform.position - targetyo.position) < 0.5f) . controlNumber不会增加并且会继续检查第一个元素的条件。这会导致无限循环。

所以你可以把你的代码改成这样:

    while (controlNumber < roomsToScanHAHA.Length)
{
targetyo = roomsToScanHAHA [controlNumber];
if (Vector3.SqrMagnitude (transform.position - targetyo.position) < 0.5f)
{
return TaskStatus.Success;
}
controlNumber++;
}

希望对你有帮助

关于C# - Unity 因此代码而崩溃 - 基于 GameObject 标记创建变换数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40607814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com