我是Unity新手。我正在关注汽车教程并尝试将其移植到Android。一些我如何设法在车上移动汽车。问题是我正在使用一个3D文本,它将被点击以加速汽车。我做的是
创建了一个3D文本。为它添加了盒子对撞机。检查Box Collider的is Trigger选项。添加了以下脚本。
public var Mainref:TouchPlaneScript;
function FixedUpdate()
{
var touch: Touch = Input.touches[0];
if(touch.phase == TouchPhase.Began)
{
Mainref.applyBrake = true;
}
if(touch.phase == TouchPhase.Ended)
{
Mainref.applyBrake = false;
}
}
function Start ()
{
// Find the OtherScript which is attached to any game object in the scene.
Mainref = FindObjectOfType(TouchPlaneScript);
}
function OnMouseUp()
{
Mainref.applyBrake = false;
Debug.Log("Stop Brake");
}
function OnMouseDown()
{
Mainref.applyBrake = true;
Debug.Log("Apply Brake");
}
Touch Method中的逻辑可能是错误的,不用担心。我还在设备上运行它时评论了鼠标功能的代码。但问题仍然存在。
问题是触摸方法如果在屏幕上触摸,如果我想要触及仅在点击文本时被调用的功能,则会被呼叫。
请注意,我现场有四个按钮。 left,right,brake,accel都是3d文本,具有相同的结构和相同的问题。
答案 0 :(得分:5)
您的代码通过检查输入触摸来检测点击事件,但您没有检查目标的位置,所以一旦您点击屏幕,每件事都会发生。您需要检查触摸的位置,以确保您正在进行正确的操作。下面的代码(不熟悉JS,这是C#版本,你需要自己翻译):
void FixedUpdate ()
{
if ( Application.platform == RuntimePlatform.IPhonePlayer ||
Application.platform == RuntimePlatform.Android )
{
if ( Input.touchCount <= 0 )
return;
// detect single touch only
Touch touch = Input.touches[0];
if ( touch.phase == TouchPhase.Began )
{
Debug.Log( 123 );
OnTouchBegan( touch.position );
}
}
else
{
if ( Input.GetMouseButtonDown( 0 ) )
{
Debug.Log(Input.mousePosition);
OnTouchBegan( Input.mousePosition );
}
}
}
void OnTouchBegan (Vector2 screenPos)
{
Ray ray = Camera.main.ScreenPointToRay( screenPos );
RaycastHit hit;
if ( Physics.Raycast( ray, out hit ) )
{
hit.collider.gameObject.SendMessage("OnClick", SendMessageOptions.DontRequireReceiver);
}
}
在此之后,您需要创建一个实现方法OnClick()的新脚本,并将其附加到您的3D文本游戏对象上。然后,当您单击它时,您的3D文本将收到OnClick消息。
希望这有帮助。
顺便说一下,如果场景中有多个摄像头,则需要将Camera.main更改为看到3D文本的摄像头。
答案 1 :(得分:0)