所以我正在制作一个游戏,并且我有一个用于放置物体的构建系统。 我对要放置的物体有一些规则,只有当它们不与其他建筑游戏物体碰撞并且它们处于篝火范围内(与篝火的范围碰撞箱碰撞)时才能放置物体
如果违反这两条规则中的任何一条,精灵应该变成红色 但如果两者都正确,它应该变成正常颜色,
问题是,我的代码可以正常工作,因为我已经使用 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() 存储在不同的变量中,然后使用该变量,但它不会改变颜色,我看到很多人都在努力解决颜色不改变的问题,但他们的解决方案不在函数中,而是在代码中;
任何帮助将不胜感激!