Воу... Это будет медленно же, если везде заменить это дело таким образом и вызывать в динамике.
Думаю можно было бы реализовать что-то более шустрое, хз как но вот пример как бы я реализовал, если бы компилил под разные платформы.
#define JAVA
namespace Platform {
public class String {
delegate string MethodValueOf(float number);
private static MethodValueOf valueOf;
public static MethodValueOf ValueOf {
get {
if (valueOf == null) {
#if JAVA
valueOf = delegate(float number) {
var javaObj = new AndroidJavaObject("java.lang.String");
return javaObj.CallStatic<System.String>("valueOf", number);
};
#elif CSHARP
valueOf = delegate(float number) {
return number.ToString();
};
#endif
}
return valueOf;
}
}
}
}
И использовать так:
var valueString = Platform.String.ValueOf(10.0f);
Получается singleton delegate, при этом который будет инициализироваться при первом вызове. Можно конечно это дело обернуть в убер функцию "Initialize", и объявлять все делегаты при включении приложения если так будет удобнее.
Тут используется define чтобы определить платформу, в Unity есть даже для этого уже стандартные
дефайны.
По мне так удобно в юзабилити, хотя зависит от тебя. Тут ещё нужно подумать над разными типами данных, т.к. delegate'ы нельзя overload'ить. Но в пользовании у тебя будет одна функция, на разные платформы. Думаю это очень сократит время в разработки игры сразу с мультиплатформенным кодом. Но, это требует создания таких вот делегатов для этих самых функций..
Готовых не видел, и думаю будет весьма сложно это как-то автоматизировать, т.к. методы все разные, по разному используются..
UPD:
Можно ещё кешировать AndroidJavaObject, т.к. он используется для доступа к статическим функциям. Для этого можно сделать статичный менеджер с хешь таблицей для доступа к объекту по имени, будет типо такого: ObjectManager.CallStatic("string", "valueOf", number);
Заместо двух строк. При этом прописать в аттрибутах самого Accessor'а все нужные данные, тип объекта, путь к классу. Получается что менеджер кеширует это дело при включении (прбежиться по акксессорам, и создаст яваобъекты), далее в теле будет проще это вызывать.
Хотя имхо, это не улучшит сильно ситуацию, единственное что это кеширует яваобъект, в остальном лишь ухудшит.