unity3d 通过碰撞更改碰撞对象的标记

waxmsbnn  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(212)

要么脚本是过时的,要么它不是我需要的,但我找不到答案。
首先,我制作了一个弹球风格的游戏,当球击中一个棋子时,它会改变颜色,但是我有多个彩色球,我想把颜色锁定在适当的位置,以免其他球改变它们(使游戏更容易一点)。我提供了一个脚本,对于一个简单的解决方案来说,这个脚本可能有点太复杂了。问题区域在void FixedUpdate底部。
(我只想更改一个标签):)

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";
        }
    }
}
ffscu2ro

ffscu2ro1#

与其搜索带有“球”标签的游戏对象,你可能在场景中有多个关闭。你可以在碰撞发生时直接改变标签。
因为在OnCollisionEnter函数中,您已经有了对gameObject的引用,您可以使用它来更改collisionInfo.gameObject.tag = "Untagged"标记。

public void OnCollisionEnter (Collision collisionInfo) {
    if (collisionInfo.gameObject.CompareTag("Ball") && gameObject.CompareTag("Ball")) {
         // Get Mesh Renderer of the Colided Ball Component.
         var meshRenderer = collsionInfo.gameObject
             .GetComponent<MeshRenderer>();

         // Change Color of collided ball to be the same as the ball it collided with.
         meshRenderer.material.color = gameObject
            .GetComponent<MeshRenderer>().material.color;

         // Set Tag to "Untagged" to make sure ball won't change color anymore
         colliderInfo.gameObject.tag = "Untagged";
    }
}

你也可以添加额外的代码来改变颜色,这取决于游戏对象的当前颜色。另外,我建议你使用CompareTag(),它会检查标签是否存在于你的场景中。
如果你想得到碰撞的gameObject,你可以用collisionInfo.gameObject.tag

相关问题