C#用于物品拾取选择的统一脚本
我目前有一个脚本,它将2个预置实例化为游戏对象。它们附加了一个脚本,C#用于物品拾取选择的统一脚本,c#,unity3d,gameobject,C#,Unity3d,Gameobject,我目前有一个脚本,它将2个预置实例化为游戏对象。它们附加了一个脚本,游戏对象被设置为false,然后被添加到我的清单数组中。这是另一个脚本,但我的问题是另一个未被选中的游戏对象仍然存在。应该是你有两个选择。一旦你拿了一个,另一个就消失了。我不知道怎么做,谁能帮我一下吗 public int moralityCounter=0; public bool Inventory; public void Store() { if (gameObject.CompareTag("Good"))
游戏对象
被设置为false,然后被添加到我的清单
数组中。这是另一个脚本,但我的问题是另一个未被选中的游戏对象仍然存在。应该是你有两个选择。一旦你拿了一个,另一个就消失了。我不知道怎么做,谁能帮我一下吗
public int moralityCounter=0;
public bool Inventory;
public void Store()
{
if (gameObject.CompareTag("Good"))
{
moralityCounter++;
Debug.Log(moralityCounter);
gameObject.SetActive(false);
}
if (gameObject.CompareTag("Bad"))
{
moralityCounter--;
Debug.Log(moralityCounter);
gameObject.SetActive(false);
}
}
如果只有单个
good
和单个bad
标记对象,则可以将所有标记为good和bad的对象设置为非活动状态
private void DeactivateAllGoodBads()
{
// Deactivate all goods
GameObject[] goodObjects = GameObject.FindGameObjectsWithTag("Good");
foreach (GameObject goodObject in goodObjects)
{
goodObject.SetActive(false);
}
// Deactivate all bads
GameObject[] badObjects = GameObject.FindGameObjectsWithTag("Bad");
foreach (GameObject badObject in badObjects)
{
badObject.SetActive(false);
}
}
public void Store()
{
bool isGood = gameObject.CompareTag("Good");
bool isBad = gameObject.CompareTag("Bad");
if (isGood)
{
moralityCounter++;
Debug.Log(moralityCounter);
}
if (isBad)
{
moralityCounter--;
Debug.Log(moralityCounter);
}
if (isGood || isBad)
{
DeactivateAllGoodBads();
}
}
如果有多个,您可以执行一些操作,例如仅禁用距离存储对象较远的对象
private void DeactivateCloseGoodBads(Vector3 position, float maxDistance)
{
// Deactivate close goods
GameObject[] goodObjects = GameObject.FindGameObjectsWithTag("Good");
foreach (GameObject goodObject in goodObjects)
{
// Check distance of found good
if (Vector3.Distance(position, goodObject.transform.position) <= maxDistance) {
goodObject.SetActive(false);
}
}
// Deactivate close bads
GameObject[] badObjects = GameObject.FindGameObjectsWithTag("Bad");
foreach (GameObject badObject in badObjects)
{
// Check distance of found bad
if (Vector3.Distance(position, badObject.transform.position) <= maxDistance) {
badObject.SetActive(false);
}
}
}
public void Store()
{
bool isGood = gameObject.CompareTag("Good");
bool isBad = gameObject.CompareTag("Bad");
if (isGood)
{
moralityCounter++;
Debug.Log(moralityCounter);
}
if (isBad)
{
moralityCounter--;
Debug.Log(moralityCounter);
}
if (isGood || isBad)
{
DeactivateCloseGoodBads(gameObject.transform.position, 10f);
}
}
private void deactivateCloseGoodbad(矢量3位置,浮点最大距离)
{
//停用封闭货物
GameObject[]goodObjects=GameObject.FindGameObjectsSwithTag(“好”);
foreach(goodObjects中的游戏对象goodObject)
{
//检查发现良好的电缆的距离
if(矢量3.距离(位置,goodObject.变换.位置)另一个未被选中的游戏对象
你这是什么意思?你能给我们看一下你的代码吗?我真的不明白你到底想实现什么在另一个游戏对象上设置active to false,所以当我拿绿苹果时,黄苹果也应该消失。苹果的位置是什么?黄苹果是X:-13.86Y:5.36 Z:-0.3812452绿色的苹果是X:12.79 Y:5.16 Z:-03812452,这是一张生成点的图片:另外,我确保了Hitbox不会发生碰撞,我正在unity 2D中工作,第二个建议中的位置用红色下划线表示。transform不包含位置定义,也没有可访问的扩展方法location ac无法找到转换的第一个参数类型(是否缺少指令或程序集引用)我想他指的是transform.position,没有transform.location这样的东西来表示统一。试试transform.position,告诉我它是否有效。代码没有错误,但在我取了第一个苹果后,第二个苹果并没有消失。Katada,是的,我指的是transform.position。谢谢。@SIGMA你在两个对象上都写了这个脚本吗?第二个之后我将有多个好的和坏的项目在一个场景