好吧,我已经在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#脚本的触摸来调用函数?
答案 0 :(得分:0)
这是一个非常简单的错误。
当只有一次触摸时,Input.touchCount
为1
。如果有2
,则Input.touchCount
值为2。
您的代码存在问题:if (Input.touchCount > 1) {
您仅检查触摸是否超过 1 。
您应该检查触摸是否更多或等于 1 :if (Input.touchCount >= 1)
OR
如果触摸超过0
:if (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");
}
}
}
}