更改 SpriteRenderer.color 在 Unity 2D 中不起作用

问题描述 投票:0回答:1

所以我正在制作一个游戏,并且我有一个用于放置物体的构建系统。 我对要放置的物体有一些规则,只有当它们不与其他建筑游戏物体碰撞并且它们处于篝火范围内(与篝火的范围碰撞箱碰撞)时才能放置物体

如果违反这两条规则中的任何一条,精灵应该变成红色 但如果两者都正确,它应该变成正常颜色,

问题是,我的代码可以正常工作,因为我已经使用 Debug.Log() 对其进行了测试,但它的实际功能是将精灵渲染器变成不同的颜色,但不起作用

这是我的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BuildingPosSetup : MonoBehaviour
{
    public bool IsPlaced;
    private Vector3 MPos;
    private bool IsObstructed;
    public IsPlacedTracker IsPlacedTrckr;
    private bool IsInrange;

    // Start is called before the first frame update
    void Start()
    {
        IsPlacedTrckr = (IsPlacedTracker)FindObjectOfType(typeof (IsPlacedTracker));
        IsPlacedTrckr.Num += 1;
    }

    // Update is called once per frame
    void Update()
    {
        MPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        if (IsPlaced == false)
        {
            if (Input.GetMouseButtonDown(0))
            {
                if (IsObstructed == false)
                {
                    if (IsInrange)
                    {
                        IsPlaced = true;
                        IsPlacedTrckr.Num -= 1;
                    }
                }
            }
        }

        if (IsPlaced == false)
        {
            transform.position = new Vector3(MPos.x, MPos.y, -6.667f);
        }


        if (IsObstructed == true || IsInrange == false)
        {
            if (IsPlaced == false)
            {
                gameObject.GetComponent<SpriteRenderer>().color = new Color (0.66f, 0.2f, 0.2f, 0.66f); 
                Debug.Log("made red");
            }
        }

        else if (IsObstructed == false && IsInrange == true)
        {
            if (IsPlaced == false)
            {
                gameObject.GetComponent<SpriteRenderer>().color = new Color (1f, 1f, 1f, 1f);
                Debug.Log("made normal");
            }
        }
    }

    public void OnTriggerStay2D(Collider2D col)
    {
        if (col.name == "Castle(Clone)" || col.name == "House(Clone)" || col.name == "CampFire(Clone)")
        {
            IsObstructed = true;
        }

        else if (col.name == "CampfireRange")
        {
            IsInrange = true;
        }
    }

    public void OnTriggerExit2D(Collider2D col)
    {
        if (col.name == "Castle(Clone)" || col.name == "House(Clone)" || col.name == "CampFire(Clone)")
        {
            IsObstructed = false;
        }

        if (col.name == "CampfireRange")
        {
            IsInrange = false;
        }
    }
}

我尝试将 gameObject.GetComponent() 存储在不同的变量中,然后使用该变量,但它不会改变颜色,我看到很多人都在努力解决颜色不改变的问题,但他们的解决方案不在函数中,而是在代码中;

任何帮助将不胜感激!

unity-game-engine game-development unityscript
1个回答
0
投票

我创建了一个游戏对象,添加了你的脚本(提交了IsPlacedTracker,因为我没有脚本)和rigidBody2D,并做了类似“CampfireRange”的操作。我的游戏对象变成红色。颜色随着抽动而变化,所以我也将Update改为FixedUpdate(因为添加了rigidBody2D)。尝试做同样的事情。 outside campfire range inside

© www.soinside.com 2019 - 2024. All rights reserved.