Unity3D:根据价格自动设定目标
我一直在Unity3D的模拟器上工作,我需要一个customer对象来自动找到价格最低的shop对象 我自己做了一些测试,发现很难实现。所以我希望有人能帮我在正确的方向上进一步调整我的代码?:) 以下是我目前掌握的代码:Unity3D:根据价格自动设定目标,unity3d,nullreferenceexception,Unity3d,Nullreferenceexception,我一直在Unity3D的模拟器上工作,我需要一个customer对象来自动找到价格最低的shop对象 我自己做了一些测试,发现很难实现。所以我希望有人能帮我在正确的方向上进一步调整我的代码?:) 以下是我目前掌握的代码: var cityName : String; var shopScript : MarketScript; function FindShopPlace () : GameObject //Make a queueing system { var max : flo
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
你真是个了不起的人!保持最小值的诀窍更有意义,在你的帮助下,我在几分钟内就解决了这个问题。我真是太感谢你了!:)