C# 通过碰撞更改碰撞对象的标记(已解决)
要么脚本已经过时,要么不是我需要的,但我找不到答案 首先,我正在做一个弹球式的游戏,每当球碰到一块,它就会改变颜色,但我有多种颜色的球,我想把颜色锁定在适当的位置,以免其他球改变它们(使游戏更容易一点)。我提供了一个脚本,对于一个简单的解决方案来说可能有点太复杂了。问题区域位于底部,带有void FixedUpdate (我只想换个标签):)C# 通过碰撞更改碰撞对象的标记(已解决),c#,unity3d,tags,collision,C#,Unity3d,Tags,Collision,要么脚本已经过时,要么不是我需要的,但我找不到答案 首先,我正在做一个弹球式的游戏,每当球碰到一块,它就会改变颜色,但我有多种颜色的球,我想把颜色锁定在适当的位置,以免其他球改变它们(使游戏更容易一点)。我提供了一个脚本,对于一个简单的解决方案来说可能有点太复杂了。问题区域位于底部,带有void FixedUpdate (我只想换个标签):) 使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; 公共类ColorBlue:单一行为 { 公共材料
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类ColorBlue:单一行为
{
公共材料垫;
公共字符串标签;
公共布尔重置=假;
找到的公共布尔=假;
公共无效OnCollisionCenter(碰撞信息)
{
if(collisionInfo.collider.tag==“Ball”)
{
gameObject.GetComponent().material.color=color.blue;
重置=真;
}
}
public void FixedUpdate()
{
如果(重置)
{
GameObject.FindWithTag(“球”);
}发现=真;
如果(找到)
{
GameObject.FindWithTag(“球”).tag=“未标记”;
}
}
}
而不是搜索带有“Ball”标记的游戏对象,您可能在场景中多次禁用该标记。您可以在发生碰撞时直接更改标记
因为在OnCollisionCenter函数中,您已经有了对游戏对象的引用,您可以使用它来更改带有collisionInfo.gameObject.tag=“untaged”
的标记
public void onCollisionCenter(碰撞信息){
if(collisionInfo.gameObject.CompareTag(“球”)和&gameObject.CompareTag(“球”)){
//获取共线球组件的网格渲染器。
var meshRenderer=collsionInfo.gameObject
.GetComponent();
//将碰撞球的颜色更改为与其碰撞的球相同。
meshRenderer.material.color=游戏对象
.GetComponent().material.color;
//将标记设置为“未标记”,以确保球不再改变颜色
colliderInfo.gameObject.tag=“未标记”;
}
}
您还可以添加其他代码,根据游戏对象的当前颜色更改颜色。另外,我建议您使用CompareTag()
,它会检查场景中是否存在标记
如果你想得到被碰撞的游戏对象,你可以使用
collisionInfo.gameObject.tag
注意开关中的注释与行为不匹配;)目前没有任何更改^^是的,我将编辑注释thx以获得注释。我认为您更希望更改新颜色。。如前所述,如果(currentColor==blue){currentColor=blue;}
;),您目前基本上是这样做的所以,我想你们不明白什么东西在变色,这完全是我的错,所以叫黛西。为了解决这个问题,改变颜色的是球与之碰撞的游戏对象,而不是球本身。为了更清楚地说明这一点,我试图确定球与游戏对象碰撞的位置,游戏对象会改变颜色(我已经处理过),但我想在正确颜色的球击中正确的块时将颜色锁定到位,我得出结论,更改(或停用)会更容易棋盘上的标签……因为标签是我允许球在碰撞后改变棋盘颜色的方式。故事的寓意是,球击中了游戏块,游戏块改变了颜色,然后游戏块标签改变为阻止碰撞的标签,颜色从球上改变。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ColorBlue : MonoBehaviour
{
public Material mat;
public string ballTag;
public bool reset = false;
public bool found = false;
public void OnCollisionEnter (Collision collisionInfo)
{
if (collisionInfo.collider.tag == "Ball" )
{
gameObject.GetComponent<MeshRenderer>().material.color = Color.blue;
reset = true;
}
}
public void FixedUpdate ()
{
if(reset)
{
GameObject.FindWithTag("Ball");
} found = true;
if(found)
{
GameObject.FindWithTag("Ball").tag = "Untagged";
}
}
}