Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过碰撞更改碰撞对象的标记(已解决)_C#_Unity3d_Tags_Collision - Fatal编程技术网

C# 通过碰撞更改碰撞对象的标记(已解决)

C# 通过碰撞更改碰撞对象的标记(已解决),c#,unity3d,tags,collision,C#,Unity3d,Tags,Collision,要么脚本已经过时,要么不是我需要的,但我找不到答案 首先,我正在做一个弹球式的游戏,每当球碰到一块,它就会改变颜色,但我有多种颜色的球,我想把颜色锁定在适当的位置,以免其他球改变它们(使游戏更容易一点)。我提供了一个脚本,对于一个简单的解决方案来说可能有点太复杂了。问题区域位于底部,带有void FixedUpdate (我只想换个标签):) 使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; 公共类ColorBlue:单一行为 { 公共材料

要么脚本已经过时,要么不是我需要的,但我找不到答案

首先,我正在做一个弹球式的游戏,每当球碰到一块,它就会改变颜色,但我有多种颜色的球,我想把颜色锁定在适当的位置,以免其他球改变它们(使游戏更容易一点)。我提供了一个脚本,对于一个简单的解决方案来说可能有点太复杂了。问题区域位于底部,带有void FixedUpdate

(我只想换个标签):)

使用系统集合;
使用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";
        }
    }
}