2015-03-06 2 views
0

Могу ли я использовать виртуальные кнопки, являющиеся дочерними элементами цели изображения, для перемещения объекта, который не является дочерним объектом изображения?Доступ к объектам вне цели изображения через виртуальные кнопки?

Если да, то как это сделать?

Если нет, есть ли другие способы обойти это?

С этой картинки вы поймете, что я пытаюсь сделать.

В принципе, я хочу, чтобы эти виртуальные клавиши, чтобы переместить мяч в лабиринтеenter image description here

ответ

2

Попробуйте это для размера.

На вашей целевой цели прикрепите к ней этот скрипт. В основном вы бы использовали FindChild или что-то в этом роде, но вместо этого оставите объект игры в классе. Таким образом вы можете назначить его прямо на что-либо на вашей сцене через инспектора.

И TADAA!

using UnityEngine; 
using System.Collections.Generic; 

public class VirtualButtonEvent : MonoBehaviour, IVirtualButtonEventHandler { 

    public GameObject Sphere; 
    public float speed; 

    // register buttons for event handling 
    void Start() { 
     VirtualButtonBehaviour[] vbs = GetComponentsInChildren<VirtualButtonBehaviour>(); 
     for (int i = 0; i < vbs.Length; ++i) { vbs[i].RegisterEventHandler(this); } 
    } 

    // button is "pressed" to move Sphere 
    public void OnButtonPressed(VirtualButtonAbstractBehaviour vb) { 
     if (vb.VirtualButtonName=="Up") { 
      Sphere.rigidbody.AddForce(new Vector3 (0, 0, speed) * speed); 
     } 
     if (vb.VirtualButtonName=="Down") { 
      Sphere.rigidbody.AddForce(new Vector3 (0, 0, -speed) * speed); 
     } 
     if (vb.VirtualButtonName=="Left") { 
      Sphere.rigidbody.AddForce(new Vector3 (-speed, 0, 0) * speed); 
     } 
     if (vb.VirtualButtonName=="Right") { 
      Sphere.rigidbody.AddForce(new Vector3 (speed, 0, 0) * speed); 
     } 
    } 

    // Release to stop Sphere? (Maybe. Don't think this will stop the ball from moving. 
    public void OnButtonReleased(VirtualButtonAbstractBehaviour vb) { 
     if (vb.VirtualButtonName=="Up") { 
      Sphere.rigidbody.AddForce(new Vector3 (0, 0, 0)); 
     } 
     if (vb.VirtualButtonName=="Down") { 
      Sphere.rigidbody.AddForce(new Vector3 (0, 0, 0)); 
     } 
     if (vb.VirtualButtonName=="Left") { 
      Sphere.rigidbody.AddForce(new Vector3 (0, 0, 0)); 
     } 
     if (vb.VirtualButtonName=="Right") { 
      Sphere.rigidbody.AddForce(new Vector3 (0, 0, 0)); 
     } 
    } 

} 
+0

Ничего, но ответ не сработал. Мой игрок не двигался. –

+0

Это хороший вопрос, если честно. Но вы уверены, что это не сработало? РЕДАКТИРОВАТЬ: Сменить сферу объекта на область GameObject. –

+0

Блестящий! Это сработало! У тебя есть Баунти. Congrats. :) –

Смежные вопросы