---
title: Java と Kotlin のプラグインコードから コードを呼び出す
product: Unity Editor
version: '6000.0'
latest_version: '7000.0'
status: This page documents version 6000.0. The latest version is 7000.0.
canonical: https://docs.unity.com/ja-jp/engine/6000.0/manual/platform-specific/android/developing/plugins-for/plugins-csharp-code-from-java-kotlin
latest_url: https://docs.unity.com/ja-jp/engine/7000.0/manual/platform-specific/android/developing/plugins-for/plugins-csharp-code-from-java-kotlin.md
last_updated: 2026-10-30
generated_at: 2026-11-13T09:38:27.178Z
locale: ja-jp
---

# Java と Kotlin のプラグインコードから コードを呼び出す

> Java と Kotlin のプラグインコードから Cスクリプトコードをコールます。

Java と Kotlin のプラグインコードは、例えばAAndroidイイベントUnUnityド結果できます。結果コードこれを行うには、以下の 2 つの方法があります。

* `UnitySendMessage`でゲームオブジェクトにメッセージを送信します。
* [AndroidJavaProxy](/engine/6000.0/script-reference/unityengine/androidjavaproxy.md) のコールバックインターフェースから C# メソッドをコール

Java および Kotlin と同等の C# 実装については、C# スクリプトからの [Java および Kotlin](/engine/6000.0/manual/platform-specific/android/developing/plugins-for/plugins-java-code-from-c-sharp.md) プラグインコードの呼び出し を参照してください。

> **Note:**
>
> いずれかの方法をデバッグするには、[AndroidJNIHelper.デバッグ](/engine/6000.0/script-reference/unityengine/androidjnihelper/debug.md) を `true` に設定して、Unity が各コールに対して実行する JNI アクティビティを記録します。

## ゲームオブジェクトへのメッセージの送信##send-a-message-to-a-gameobject

`UnitySendMessage` を使用して、Java または Kotlin プラグインコードから名前付きゲームオブジェクトのメソッドに文字列を送信します。これは、C# メソッドが文字列を受け取りますが、プラグインに値を返さない単方向のコールです。簡単な通知に使用します。

プラグインは、ターゲットゲームオブジェクトの名前、コールするメソッドの名前、および文字列メッセージの 3 つの引数で`UnitySendMessage`を呼び出します。

以下の Java 例では、`UnitySendMessage` を実装しています。

```lang-java
パッケージ com.example.androidplugin;

import com.unity3d.player.UnityPlayer;

public class MessageSender {
    public static void sendToUnity(String gameObjectName) {
        UnityPlayer.UnitySendMessage(gameObjectName, "OnMessageReceived", "Hello from Java");
    }
}
```

以下の Kotlin 例では、`UnitySendMessage` を実装しています。

```lang-kotlin
パッケージ com.example.androidplugin

import com.unity3d.player.UnityPlayer

object MessageSender {
    @JvmStatic
    fun sendToUnity(gameObjectName:string
        UnityPlayer.UnitySendMessage(gameObjectName, "OnMessageReceived", "Hello from Kotlin")
    }
}
```

C# スクリプトで、`UnitySendMessage` が呼び出すメソッドを追加します。スクリプトが、名前が最初の引数と一致するゲームオブジェクトにアタッチされていることを確認します。

```lang-cs
using UnityEngine;

public class MessageReceiver :MonoBehaviour
{
    void Start()
    {
        gameObject.name = "MessageReceiver";
        using var sender = new AndroidJavaClass("com.example.androidplugin.MessageSender");
        sender.CallStatic("sendToUnity", gameObject.name);
    }

    void OnMessageReceived(string message)
    {
        Debug.Log("Message from plug-in: " + message);
    }
}
```

以下の例は、

1. ゲームオブジェクトの名前を、プラグインが送信するターゲット名と一致するように設定します。
2. プラグインを呼び出します。プラグインは、`UnitySendMessage` を使用して、名前付きのゲームオブジェクトの `OnMessageReceived` メソッドに文字列を返します。
3. プラグインが送信するメッセージを記録します。

> **Note:**
>
> この例では、C# がプラグインを直接呼び出してメッセージをトリガーするため、Android イベントなしでサンプルを実行できます。実際のプロジェクトでは、プラグインはボタンのタップやライフサイクルのコールバックなどの Android イベントに反応して`UnitySendMessage`を呼び出します。

`UnitySendMessage` には以下の制限事項があります。

* シグネチャ`void MethodName(string message)`を持つ C# メソッドのみコールできます。
* コールは非同期で、遅延は 1 フレームです。
* 同じ名前の複数の GameObjects は競合の原因になります。

文字列以外のデータを送信するには、JSON 文字列にシリアライズします。詳細は、Java/Kotlin および C# コードで[サポートされる](/engine/6000.0/manual/platform-specific/android/developing/plugins-for/plugins-java-code-from-c-sharp/datatypes-java-kotlin-csharp.md)データ型 を参照してください。

## コールバックインターフェースフェースを通して Cメソッドをコール##call-a-c-method-through-a-callback-interface

[AndroidJavaProxy](/engine/6000.0/script-reference/unityengine/androidjavaproxy.md) を使用して、C# で Java または Kotlin インターフェースを実装します。プラグインがインターフェースでメソッドを呼び出すと、Unity は C# 実装を実行します。このアプローチは、型付きコールバック、または構造化データまたは戻り値を渡す場合に使用します。

プラグインのインターフェースとそれを呼び出すクラスを定義します。以下のプラグインコードは、C# にメッセージを返すためにインターフェースメソッドを呼び出します。

### Java プラグインコード##java-plug-in-code

```lang-java
パッケージ com.example.androidplugin;

public class Greeter {
    public interface GreetingCallback {
        void onGreeting(String message);
    }

    public void requestGreeting(GreetingCallback callback) {
        callback.onGreeting("Hello from Java");
    }
}
```

\### Kotlin plug-in code

```lang-kotlin
パッケージ com.example.androidplugin

クラス Greeter {
    インターフェース GreetingCallback {
        fun onGreeting(message:string
    }

    fun requestGreeting(callback:GreetingCallback) {
        callback.onGreeting("Hello from Kotlin")
    }
}
```

C# スクリプトで、`AndroidJavaProxy` から派生したクラスを作成し、インターフェースを実装します。このクラスのインスタンスをプラグインに渡します。

```lang-cs
using UnityEngine;

public class GreetingExample :MonoBehaviour
{
    クラス GreetingCallback ：AndroidJavaProxy
    {
        public GreetingCallback() : base("com.example.androidplugin.Greeter$GreetingCallback") { }

        void onGreeting(string message)
        {
            Debug.Log("Greeting from plug-in: " + message);
        }
    }

    void Start()
    {
        using var greeter = new AndroidJavaObject("com.example.androidplugin.Greeter");
        greeter.Call("requestGreeting", new GreetingCallback());
    }
}
```

以下の例は、

1. `AndroidJavaProxy` から派生した C# `GreetingCallback`クラスを作成し、基本コンストラクターにインターフェース名を渡します。`GreetingCallback` は `Greeter` クラスにネストされているため、名前には`$`区切り文字 `com.example.androidplugin.Greeter$GreetingCallback` が使用されます。
2. インターフェースメソッドと一致するシグネチャを持つ`onGreeting`を実装します。Unity は、この C# 実装にインターフェースの呼び出しを自動的にルーティングします。
3. `Greeter` プラグインクラスの`AndroidJavaObject`を作成し、プロキシを渡して`requestGreeting`を呼び出します。その後、プラグインは C# 実装を実行する `onGreeting` を呼び出します。

> **Note:**
>
> この例では、プラグインは Unity のメインスレッドでインターフェースメソッドを呼び出します。プラグインが背景スレッドからメソッドを呼び出す場合、C# の実装も背景スレッドで実行されます。この場合、[AndroidApplication.InvokeOnUnityMainThread](/engine/6000.0/script-reference/unityengine/android/androidapplication/invokeonunitymainthread.md) を使用して、メインスレッドで Unity API 呼び出しを実行します。

プラグインコードの記述の詳細については、[Java および Kotlin ソースプラグイン](/engine/6000.0/manual/platform-specific/android/developing/plugins-for/plugin-types/java-source-plugins.md) を参照してください。

## 追加リソース##additional-resources

* [Unity の Java ネイティブインターフェース API](/engine/6000.0/manual/platform-specific/android/developing/plugins-for/plugins-java-code-from-c-sharp/jni-apis-unity.md)
* [Java/Kotlin および C# コードでサポートされるデータ型](/engine/6000.0/manual/platform-specific/android/developing/plugins-for/plugins-java-code-from-c-sharp/datatypes-java-kotlin-csharp.md)
* [Java/Kotlin コードを呼び出すためのベストプラクティス](/engine/6000.0/manual/platform-specific/android/developing/plugins-for/plugins-java-code-from-c-sharp/call-java-kotlin-code-best-practices.md)
