对象未实例化(C#)

对象未实例化(C#),c#,unity3d,instantiation,C#,Unity3d,Instantiation,我正在Unity中编写一个塔楼防御游戏,在试图找到放置塔楼的方法时遇到了一个障碍。我的想法是,当玩家拥有一定数量的积分时,可以点击游戏中的一项艺术资产,并用一座塔替换该艺术资产。不幸的是,即使玩家拥有适当数量的点数,对象也不会实例化。我已经确保将预置链接到脚本,但它不起作用。我被难住了,代码的逻辑似乎是正确的,但也许有人能帮我找出哪里出了问题 public class PointManager : MonoBehaviour { public int pointCount; p

我正在Unity中编写一个塔楼防御游戏,在试图找到放置塔楼的方法时遇到了一个障碍。我的想法是,当玩家拥有一定数量的积分时,可以点击游戏中的一项艺术资产,并用一座塔替换该艺术资产。不幸的是,即使玩家拥有适当数量的点数,对象也不会实例化。我已经确保将预置链接到脚本,但它不起作用。我被难住了,代码的逻辑似乎是正确的,但也许有人能帮我找出哪里出了问题

public class PointManager : MonoBehaviour
{

    public int pointCount;
    public Text pointDisplay;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        pointDisplay.text = "Points: " + pointCount;
    }
}

public class PlaceTower: MonoBehaviour
{

    public GameObject Tower;
    private GameObject firstTower;
    int placeCost = 25;
    private PointManager pointsGained;

    // Start is called before the first frame update
    void Start()
    {
        pointsGained = GameObject.FindGameObjectWithTag("Point").GetComponent<PointManager>();
    }

    // Update is called once per frame
    void Update()
    {

    }

    private void OnMouseDown()
    {
        if (pointsGained.pointCount >= placeCost)
        {
            firstTower = Instantiate(Tower, transform.position, Quaternion.identity);
            //Destroy(this.gameObject);
        }
    }
}
公共类PointManager:MonoBehavior
{
公共int点计数;
公共文本点显示;
//在第一帧更新之前调用Start
void Start()
{
}
//每帧调用一次更新
无效更新()
{
pointDisplay.text=“点:”+点计数;
}
}
公共类PlaceTower:单一行为
{
公共游戏机塔;
私人游戏对象firstTower;
成本=25;
私人PointManager pointsGained;
//在第一帧更新之前调用Start
void Start()
{
pointsGained=GameObject.FindGameObjectWithTag(“点”).GetComponent();
}
//每帧调用一次更新
无效更新()
{
}
私有void OnMouseDown()
{
如果(pointsGained.pointCount>=placeCost)
{
firstTower=实例化(Tower、transform.position、Quaternion.identity);
//摧毁(这个游戏对象);
}
}
}

我明白了。问题不在于我的代码,而在于我的预置。在文档中,我误读了
OnMouseDown
对具有碰撞器的对象有效。当我在试图实例化的对象上设置了一个圆碰撞器时,我未能在试图实例化的对象上设置一个圆碰撞器。这样做立即解决了问题。一个简单的错误,如果没有第二种意见,我会完全忽略。谢谢你,Pac0

作为参考,我使用以下链接进行研究:首先,让我们进行一些调试。你确定你的
实例化
代码被命中了吗?您可以在控制台中进行一些日志记录,或者将一个公共变量设置为true并在检查器中显示它。另外,您的PlaceTower脚本是否正确地分配给将发生MouseDown事件的位置?(很抱歉,如果这看起来很明显,但目前我们没有你的工作在眼睛下)希望有一种方法可以通过这里发送图片。。。此脚本链接到地图上放置的预制资源。把它想象成一个土堆,当你点击它时,一座塔应该被建造起来。这就是MouseDown活动的目的。我不能完全确定实例化代码是否被命中。我的代码确实允许程序在控制台中无错误地运行,但对象根本不会出现在游戏中。你能插入一个
Debug.Log(“鼠标在if内按下”)就在
实例化调用之前?在
if
之前还有一个
Debug.Log(“鼠标按下”)
?您应该能够在Unity控制台中查看事件是否被命中,以及
if
块是否被命中。