无法从C#中的另一个脚本调用方法?使用Unity?

时间:2016-10-15 23:26:29

标签: c# unity3d raycasting

好吧,我已经在Unity3d论坛上问了一下没有运气。我在这里尝试一些非常简单的东西,由于某种原因,我无法获得一个C#脚本来调用另一个函数。

我在Unity这里,我有2个脚本,我试图用来检测游戏对象的简单点击并根据该点击做一些事情 - OnMouseDown因为某种原因失败了。

我读了一篇关于使用附加到空的TouchManager脚本从触摸对象的脚本调用函数的文章,所以这就是;它使用Raycasts,并且应该获得被触摸的游戏对象,并调用Dessin s; s.ajouteFigure(Cercle(1.1)); 函数:

Touched()

没有第一个if,我在Array错误中得到protected virtual void Update () { if (Input.touchCount > 1) { if (Input.touches [0].phase == TouchPhase.Stationary) { Ray ray = Camera.main.ScreenPointToRay (Input.touches [0].position); if (Physics.Raycast (ray, out hit, 100.0f)) { touchedObject = hit.transform.gameObject; touchedObject.GetComponent<touchableGameObject> ().Touched (); print (touchedObject.name); } else print ("GetMouseButtonDown on nothing"); } } } 。但是现在首先如果我没有得到任何结果。

然后我的敌人预制件(显然是一个物体)我就是:

OutofBounds

该函数是公共的,因此应该可以调用它。我在Start()方法中有一个打印,所以我知道脚本正在工作,但即使我明显触摸/点击游戏对象,也永远不会调用public void Touched() { print ("touched!! WORKING"); } 方法。

如果没有Touch Manager脚本中的第一个if语句,如果打印出来,我会一直得到最后一个:

Touched()

我对Unity和C#相对较新,并且无法解决这个问题。我需要这个工作,我很绝望。

如何基于来自另一个C#脚本的触摸来调用函数?

1 个答案:

答案 0 :(得分:0)

这是一个非常简单的错误。

当只有一次触摸时,Input.touchCount1。如果有2,则Input.touchCount值为2。

您的代码存在问题if (Input.touchCount > 1) {

检查触摸是否超过 1

您应该检查触摸是否更多或等于 1 if (Input.touchCount >= 1)

OR

如果触摸超过0if (Input.touchCount > 0)

任何一个都可以解决你的问题。

最后,无法保证触摸的GameObject会附加touchableGameObject脚本。因此,在调用GetComponent<touchableGameObject>()函数之前,您必须先检查null是否为Touched()。请大写脚本的名称。这将使您更容易识别脚本和变量名称。

protected virtual void Update()
{
    if (Input.touchCount >= 1)
    {
        if (Input.touches[0].phase == TouchPhase.Stationary)
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.touches[0].position);
            if (Physics.Raycast(ray, out hit, 100.0f))
            {
                touchedObject = hit.transform.gameObject;


                touchableGameObject touchScript = touchedObject.GetComponent<touchableGameObject>();
                if (touchScript != null)
                {
                    touchScript.Touched();
                }

                print(touchedObject.name);
            }
            else
            {
                print("GetMouseButtonDown on nothing");
            }
        }
    }
}