Unity3D:根据价格自动设定目标

Unity3D:根据价格自动设定目标,unity3d,nullreferenceexception,Unity3d,Nullreferenceexception,我一直在Unity3D的模拟器上工作,我需要一个customer对象来自动找到价格最低的shop对象 我自己做了一些测试,发现很难实现。所以我希望有人能帮我在正确的方向上进一步调整我的代码?:) 以下是我目前掌握的代码: var cityName : String; var shopScript : MarketScript; function FindShopPlace () : GameObject //Make a queueing system { var max : flo

我一直在Unity3D的模拟器上工作,我需要一个customer对象来自动找到价格最低的shop对象

我自己做了一些测试,发现很难实现。所以我希望有人能帮我在正确的方向上进一步调整我的代码?:)

以下是我目前掌握的代码:

var cityName : String;
var shopScript : MarketScript;


function FindShopPlace () : GameObject //Make a queueing system
{
    var max : float;
    var target : GameObject;
    var gos : GameObject[];

    var goScript : MarketScript;

    gos = GameObject.FindGameObjectsWithTag("market");

    for (var go : GameObject in gos)  
    {
        goScript = go.GetComponent(MarketScript);

        if (goScript.cityName == cityName)
        {
            if (goScript.resalePrice >= max && goScript.cityName == cityName)
            {
                max = goScript.resalePrice;
            }

            if (goScript.resalePrice < max && goScript.cityName == cityName)
            {
                print ("test");
                target = go;
            }
        }
    }
    shopScript = target.GetComponent(MarketScript);
    return target;
}
var cityName:String;
var-shopScript:MarketScript;
函数FindShopPlace():GameObject//创建排队系统
{
var-max:浮动;
var目标:游戏对象;
var-gos:GameObject[];
var-goScript:MarketScript;
gos=GameObject.FindGameObjectsWithTag(“市场”);
for(var go:gos中的游戏对象)
{
goScript=go.GetComponent(MarketScript);
if(goScript.cityName==cityName)
{
if(goScript.resalePrice>=max&&goScript.cityName==cityName)
{
max=goScript.resalePrice;
}
if(goScript.resalePrice
当前使用此代码时,从未找到并分配目标。我从底部第3行获得以下NullReferenceException:

NullReferenceException:对象引用未设置为 对象ConsumerScript.FindShopPlace()(位于 Assets/_MyAssets/_Scripts/ConsumerScript.js:268)ConsumerScript.Update ()(位于Assets/_MyAssets/_Scripts/ConsumerScript.js:96)


您将获得NullReferenceException,因为从未将目标设置为任何对象

您在循环中所做的是(1)查找最大价格,(2)查找最大值之后的最后一个小于最大值的对象

因此,如果您的订单价格为1、2、3,则永远不会设置目标,因为在每个步骤中,您都将最大值设置为新值,并且永远不会设置目标。即使设置了它也不一定是最便宜的。考虑价格1, 3, 2。
First Step: Set maximum to 1
Second Step: Set maximum to 3
Third Step: Set target to the GameObject with price 2
如果你遇到这样的错误,试着用这样简单的例子来找出问题的根源。此外,您正在使用变量maxium(第一次比较),但从未将其设置为任何值,不确定这在Javascript中是否有效(可能),但这是一种糟糕的做法

你真正想要的不是找到最高价格或最低价格,而是找到转售价格最低的游戏对象

var min : float;
var success : boolean;
var firstHit : boolean;


...

success = false;
firstHit = true;

for (var go : GameObject in gos)  
{
    goScript = go.GetComponent(MarketScript);

    if (goScript.cityName == cityName)
    {
        success = true;

        if(firstHit) // alternatively to this would be to set minimum to a value that is higher than every possible price ( thats also what i meant with you shouldnt use max without setting it to anything)
        {
            min = goScript.resalePrice;
            target = go;
        }
        else
        {
            if (goScript.resalePrice < min )
            {
                min = goScript.resalePrice;
                target = go; 
            }
        }
    }
}

if(success)
{
    shopScript = target.GetComponent(MarketScript);
    return target;
}
else
{
    // TODO: handle the case that there isnt a shop in the city.
    //       Maybe give an error Message with Debug.Log if this isnt supposed to happen

    return null;
}
var最小值:浮动;
var成功:布尔;
var-firstHit:布尔型;
...
成功=错误;
firstHit=true;
for(var go:gos中的游戏对象)
{
goScript=go.GetComponent(MarketScript);
if(goScript.cityName==cityName)
{
成功=真实;
if(firstHit)//另一种方法是将最小值设置为高于所有可能价格的值(这也是我的意思,如果不将其设置为任何值,则不应使用max)
{
min=goScript.resalePrice;
目标=前进;
}
其他的
{
if(goScript.resalePrice
你真是个了不起的人!保持最小值的诀窍更有意义,在你的帮助下,我在几分钟内就解决了这个问题。我真是太感谢你了!:)