2

I'm new to unity :

I create in Unity a simple cube and put some texture over. I rotate the cube... move camera....then export to android studio. When I run everything looks like in Unity.

But I want to move camera or the cube from android studio code ( programming lines ) and I can not find any way to .."findViewById" or similar to be able to find my cube :)

I try to make a C# file ( I just crate one in assets folder ) and put :

public class test : MonoBehaviour {
public GameObject respawn;
void Start () {

    Debug.Log("aaaaaaaaaaaaa1111111111111111");
    if (respawn == null)
        respawn = GameObject.FindWithTag("mamaie");


    respawn.transform.Rotate(10f, 50f, 10f);

}

// Update is called once per frame
void Update () {
    transform.Rotate(10f, 50f, 10f);
}

void LateUpdate()
{
    transform.Rotate(10f, 50f, 10f);
}
}

So... how can I control my cube ( designed in unity and imported in android studio ) from programming lines ?

Programmer
  • 121,791
  • 22
  • 236
  • 328

1 Answers1

2

You can call C# function from Java with UnityPlayer.UnitySendMessage.

This is the what the parameters look like:

UnityPlayer.UnitySendMessage("GameObjectName", "MethodName", "parameter to send");

In order to have access to this function, you have to include classes.jar from the <UnityInstallDirectory>\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes directory into your Android Studio project then import it with import com.unity3d.player.UnityPlayer; in the Android Studio Project.

Your C# code:

bool rotate = false;

void startRotating()
{
    rotate = true;
}

void stopRotating()
{
    rotate = false;
}

void Update()
{
    if (rotate)
        transform.Rotate(10f, 50f, 10f);
}

Let's assume that the script above is attached to GameObject called "Cube".

To start rotation from Java:

UnityPlayer.UnitySendMessage("Cube", "startRotating", null);

To stop rotation from Java:

UnityPlayer.UnitySendMessage("Cube", "stopRotating", null);
Programmer
  • 121,791
  • 22
  • 236
  • 328
  • I did as you describe but i;m getting error : at com.unity3d.player.UnityPlayer.UnitySendMessage(unavailable:-1) ; I modify the boolean rotate and set by default true and after i run it did not rotate by default –  Aug 19 '17 at 21:50
  • how i;m sure that my text.cs file is "linked" to my project ? When i use UnitySendMessage i suppose to send somehow the name of the *.cs file ? –  Aug 19 '17 at 21:55
  • i replace la 3-rd parameter from "null" to "" and now it does not crash. BUT : i recive "SendMessage: object Cube does not have receiver for function startRotating!" –  Aug 19 '17 at 22:11
  • I founded : The model "Cube" did not have any script selected. After i set the file... it works –  Aug 19 '17 at 22:53