@hugebug4ever/react-native-unity 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +77 -0
- package/android/build.gradle +38 -0
- package/android/consumer-rules.pro +3 -0
- package/android/src/main/AndroidManifest.xml +4 -0
- package/android/src/main/java/com/hugebug4ever/rnunity/RNUnityBridge.kt +5 -0
- package/android/src/main/java/com/hugebug4ever/rnunity/RNUnityHostView.kt +95 -0
- package/android/src/main/java/com/hugebug4ever/rnunity/RNUnityPackage.kt +31 -0
- package/android/src/main/java/com/hugebug4ever/rnunity/RNUnityViewManager.kt +30 -0
- package/android/src/main/java/com/hugebug4ever/rnunity/UnityPlayerAdapter.kt +58 -0
- package/android/src/main/java/com/hugebug4ever/rnunity/UnityRuntimeController.kt +329 -0
- package/android/src/main/java/com/hugebug4ever/rnunity/UnityRuntimeModule.kt +46 -0
- package/android/src/main/java/com/hugebug4ever/rnunity/UnityRuntimeState.kt +16 -0
- package/app.plugin.js +2 -0
- package/cli/index.js +140 -0
- package/ios/RNUnityNativeBridge.mm +6 -0
- package/ios/RNUnityRuntimeController.h +29 -0
- package/ios/RNUnityRuntimeController.mm +316 -0
- package/ios/RNUnityView.h +17 -0
- package/ios/RNUnityView.mm +105 -0
- package/ios/UnityRuntime.mm +49 -0
- package/lib/commonjs/UnityRuntime.js +53 -0
- package/lib/commonjs/UnityRuntime.js.map +1 -0
- package/lib/commonjs/UnityView.js +35 -0
- package/lib/commonjs/UnityView.js.map +1 -0
- package/lib/commonjs/index.js +20 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/specs/NativeUnityRuntime.js +9 -0
- package/lib/commonjs/specs/NativeUnityRuntime.js.map +1 -0
- package/lib/commonjs/specs/NativeUnityView.js +10 -0
- package/lib/commonjs/specs/NativeUnityView.js.map +1 -0
- package/lib/commonjs/types.js +6 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/typescript/UnityRuntime.d.ts +12 -0
- package/lib/typescript/UnityRuntime.d.ts.map +1 -0
- package/lib/typescript/UnityView.d.ts +3 -0
- package/lib/typescript/UnityView.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +4 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/specs/NativeUnityRuntime.d.ts +15 -0
- package/lib/typescript/specs/NativeUnityRuntime.d.ts.map +1 -0
- package/lib/typescript/specs/NativeUnityView.d.ts +32 -0
- package/lib/typescript/specs/NativeUnityView.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +63 -0
- package/lib/typescript/types.d.ts.map +1 -0
- package/package/UnityRuntime.ts +64 -0
- package/package/UnityView.tsx +32 -0
- package/package/index.ts +20 -0
- package/package/specs/NativeUnityRuntime.ts +17 -0
- package/package/specs/NativeUnityView.ts +27 -0
- package/package/types.ts +85 -0
- package/package.json +90 -0
- package/plugin/build/index.js +132 -0
- package/plugin/ios/configure_unity.rb +108 -0
- package/plugin/src/index.ts +175 -0
- package/plugin/tsconfig.json +13 -0
- package/react-native-unity.podspec +34 -0
- package/react-native.config.js +9 -0
- package/unity-package/Editor/Exporter.cs +91 -0
- package/unity-package/Editor/Exporter.cs.meta +2 -0
- package/unity-package/Editor/ReactNativeUnity.Editor.asmdef +8 -0
- package/unity-package/Editor/ReactNativeUnity.Editor.asmdef.meta +7 -0
- package/unity-package/Editor.meta +8 -0
- package/unity-package/Runtime/ReactNativeBridge.cs +48 -0
- package/unity-package/Runtime/ReactNativeBridge.cs.meta +2 -0
- package/unity-package/Runtime/ReactNativeUnity.Runtime.asmdef +6 -0
- package/unity-package/Runtime/ReactNativeUnity.Runtime.asmdef.meta +7 -0
- package/unity-package/Runtime.meta +8 -0
- package/unity-package/package.json +11 -0
- package/unity-package/package.json.meta +7 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#import "RNUnityView.h"
|
|
2
|
+
#import "RNUnityRuntimeController.h"
|
|
3
|
+
|
|
4
|
+
#import <react/renderer/components/RNUnitySpec/ComponentDescriptors.h>
|
|
5
|
+
#import <react/renderer/components/RNUnitySpec/EventEmitters.h>
|
|
6
|
+
#import <react/renderer/components/RNUnitySpec/Props.h>
|
|
7
|
+
#import <react/renderer/components/RNUnitySpec/RCTComponentViewHelpers.h>
|
|
8
|
+
|
|
9
|
+
using namespace facebook::react;
|
|
10
|
+
|
|
11
|
+
@implementation RNUnityView {
|
|
12
|
+
UIView *_unityView;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
+ (ComponentDescriptorProvider)componentDescriptorProvider {
|
|
16
|
+
return concreteComponentDescriptorProvider<RNUnityViewComponentDescriptor>();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
- (instancetype)init {
|
|
20
|
+
if ((self = [super init])) {
|
|
21
|
+
_hostId = NSUUID.UUID.UUIDString;
|
|
22
|
+
_detachedBehavior = @"pause";
|
|
23
|
+
_props = std::make_shared<const RNUnityViewProps>();
|
|
24
|
+
self.clipsToBounds = YES;
|
|
25
|
+
}
|
|
26
|
+
return self;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
- (void)didMoveToWindow {
|
|
30
|
+
[super didMoveToWindow];
|
|
31
|
+
if (self.window && self.bounds.size.width > 0 && self.bounds.size.height > 0) {
|
|
32
|
+
[[RNUnityRuntimeController shared] attachHost:self];
|
|
33
|
+
} else if (!self.window) {
|
|
34
|
+
[[RNUnityRuntimeController shared] detachHost:self.hostId];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
- (void)layoutSubviews {
|
|
39
|
+
[super layoutSubviews];
|
|
40
|
+
_unityView.frame = self.bounds;
|
|
41
|
+
if (self.window && self.bounds.size.width > 0 && self.bounds.size.height > 0) {
|
|
42
|
+
[[RNUnityRuntimeController shared] attachHost:self];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
- (void)prepareForRecycle {
|
|
47
|
+
[[RNUnityRuntimeController shared] detachHost:self.hostId];
|
|
48
|
+
[super prepareForRecycle];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
- (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const &)oldProps {
|
|
52
|
+
const auto &newProps = *std::static_pointer_cast<const RNUnityViewProps>(props);
|
|
53
|
+
self.detachedBehavior = newProps.detachedBehavior == "keepRunning" ? @"keepRunning" : @"pause";
|
|
54
|
+
[super updateProps:props oldProps:oldProps];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
- (void)mountUnityView:(UIView *)view {
|
|
58
|
+
if (_unityView == view && view.superview == self) return;
|
|
59
|
+
[_unityView removeFromSuperview];
|
|
60
|
+
_unityView = view;
|
|
61
|
+
[view removeFromSuperview];
|
|
62
|
+
view.frame = self.bounds;
|
|
63
|
+
view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
|
64
|
+
[self addSubview:view];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
- (void)unmountUnityView:(UIView *)view {
|
|
68
|
+
if (!view || view == _unityView) {
|
|
69
|
+
[_unityView removeFromSuperview];
|
|
70
|
+
_unityView = nil;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
- (std::shared_ptr<const RNUnityViewEventEmitter>)unityEventEmitter {
|
|
75
|
+
return std::static_pointer_cast<const RNUnityViewEventEmitter>(_eventEmitter);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
- (void)emitReadyWithState:(NSString *)state generation:(NSInteger)generation {
|
|
79
|
+
auto emitter = [self unityEventEmitter];
|
|
80
|
+
if (emitter) emitter->onReady({state.UTF8String, (double)generation, self.hostId.UTF8String});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
- (void)emitMessage:(NSString *)message generation:(NSInteger)generation {
|
|
84
|
+
auto emitter = [self unityEventEmitter];
|
|
85
|
+
if (emitter) emitter->onMessage({(double)generation, message.UTF8String});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
- (void)emitState:(NSString *)state generation:(NSInteger)generation {
|
|
89
|
+
auto emitter = [self unityEventEmitter];
|
|
90
|
+
if (emitter) emitter->onStateChange({state.UTF8String, (double)generation});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
- (void)emitError:(NSDictionary *)error {
|
|
94
|
+
auto emitter = [self unityEventEmitter];
|
|
95
|
+
if (!emitter) return;
|
|
96
|
+
emitter->onError({
|
|
97
|
+
[error[@"code"] UTF8String],
|
|
98
|
+
[error[@"message"] UTF8String],
|
|
99
|
+
[error[@"state"] UTF8String],
|
|
100
|
+
[error[@"generation"] doubleValue],
|
|
101
|
+
[(error[@"nativeCause"] ?: @"") UTF8String],
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#import <React/RCTEventEmitter.h>
|
|
2
|
+
#import <ReactCommon/RCTTurboModule.h>
|
|
3
|
+
#import <RNUnitySpec/RNUnitySpec.h>
|
|
4
|
+
#import "RNUnityRuntimeController.h"
|
|
5
|
+
|
|
6
|
+
@interface UnityRuntime : RCTEventEmitter <NativeUnityRuntimeSpec>
|
|
7
|
+
@end
|
|
8
|
+
|
|
9
|
+
@implementation UnityRuntime
|
|
10
|
+
|
|
11
|
+
RCT_EXPORT_MODULE(UnityRuntime)
|
|
12
|
+
|
|
13
|
+
+ (BOOL)requiresMainQueueSetup { return YES; }
|
|
14
|
+
|
|
15
|
+
- (instancetype)init {
|
|
16
|
+
if ((self = [super init])) {
|
|
17
|
+
NSNotificationCenter *center = NSNotificationCenter.defaultCenter;
|
|
18
|
+
[center addObserver:self selector:@selector(onState:) name:RNUnityStateChangeNotification object:nil];
|
|
19
|
+
[center addObserver:self selector:@selector(onMessage:) name:RNUnityMessageNotification object:nil];
|
|
20
|
+
[center addObserver:self selector:@selector(onError:) name:RNUnityErrorNotification object:nil];
|
|
21
|
+
[center addObserver:self selector:@selector(appBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];
|
|
22
|
+
[center addObserver:self selector:@selector(appForeground:) name:UIApplicationWillEnterForegroundNotification object:nil];
|
|
23
|
+
}
|
|
24
|
+
return self;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
- (NSArray<NSString *> *)supportedEvents { return @[ @"RNUnity:stateChange", @"RNUnity:message", @"RNUnity:error" ]; }
|
|
28
|
+
- (void)onState:(NSNotification *)event { [self sendEventWithName:@"RNUnity:stateChange" body:event.userInfo]; }
|
|
29
|
+
- (void)onMessage:(NSNotification *)event { [self sendEventWithName:@"RNUnity:message" body:event.userInfo]; }
|
|
30
|
+
- (void)onError:(NSNotification *)event { [self sendEventWithName:@"RNUnity:error" body:event.userInfo]; }
|
|
31
|
+
- (void)appBackground:(NSNotification *)event { [[RNUnityRuntimeController shared] setApplicationBackgrounded:YES]; }
|
|
32
|
+
- (void)appForeground:(NSNotification *)event { [[RNUnityRuntimeController shared] setApplicationBackgrounded:NO]; }
|
|
33
|
+
|
|
34
|
+
- (void)start:(NSString *)behavior resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { [[RNUnityRuntimeController shared] start:behavior resolve:resolve reject:reject]; }
|
|
35
|
+
- (void)pause:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { [[RNUnityRuntimeController shared] pause:resolve reject:reject]; }
|
|
36
|
+
- (void)resume:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { [[RNUnityRuntimeController shared] resume:resolve reject:reject]; }
|
|
37
|
+
- (void)unload:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { [[RNUnityRuntimeController shared] unload:resolve reject:reject]; }
|
|
38
|
+
- (void)getState:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { resolve([RNUnityRuntimeController shared].stateName); }
|
|
39
|
+
- (void)getDiagnostics:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { resolve([RNUnityRuntimeController shared].diagnosticsJSON); }
|
|
40
|
+
- (void)sendMessage:(NSString *)gameObject methodName:(NSString *)methodName message:(NSString *)message resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { [[RNUnityRuntimeController shared] sendMessage:gameObject methodName:methodName message:message resolve:resolve reject:reject]; }
|
|
41
|
+
- (void)addListener:(NSString *)eventName { [super addListener:eventName]; }
|
|
42
|
+
- (void)removeListeners:(double)count { [super removeListeners:count]; }
|
|
43
|
+
|
|
44
|
+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const facebook::react::ObjCTurboModule::InitParams &)params {
|
|
45
|
+
return std::make_shared<facebook::react::NativeUnityRuntimeSpecJSI>(params);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@end
|
|
49
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.UnityRuntime = void 0;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _NativeUnityRuntime = _interopRequireDefault(require("./specs/NativeUnityRuntime.js"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
const missingModuleError = () => new Error('@hugebug4ever/react-native-unity is not linked. Expo Go is unsupported; use prebuild and a development build.');
|
|
11
|
+
function moduleOrThrow() {
|
|
12
|
+
if (!_NativeUnityRuntime.default) throw missingModuleError();
|
|
13
|
+
return _NativeUnityRuntime.default;
|
|
14
|
+
}
|
|
15
|
+
function requireText(name, value) {
|
|
16
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
17
|
+
throw new TypeError(`${name} must be a non-empty string`);
|
|
18
|
+
}
|
|
19
|
+
if (value.length > 1024 * 1024) {
|
|
20
|
+
throw new RangeError(`${name} exceeds the 1 MiB limit`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const UnityRuntime = exports.UnityRuntime = {
|
|
24
|
+
start(options = {}) {
|
|
25
|
+
return moduleOrThrow().start(options.detachedBehavior ?? 'pause');
|
|
26
|
+
},
|
|
27
|
+
pause() {
|
|
28
|
+
return moduleOrThrow().pause();
|
|
29
|
+
},
|
|
30
|
+
resume() {
|
|
31
|
+
return moduleOrThrow().resume();
|
|
32
|
+
},
|
|
33
|
+
unload() {
|
|
34
|
+
return moduleOrThrow().unload();
|
|
35
|
+
},
|
|
36
|
+
async getState() {
|
|
37
|
+
return await moduleOrThrow().getState();
|
|
38
|
+
},
|
|
39
|
+
async getDiagnostics() {
|
|
40
|
+
return JSON.parse(await moduleOrThrow().getDiagnostics());
|
|
41
|
+
},
|
|
42
|
+
sendMessage(input) {
|
|
43
|
+
requireText('gameObject', input.gameObject);
|
|
44
|
+
requireText('methodName', input.methodName);
|
|
45
|
+
requireText('message', input.message);
|
|
46
|
+
return moduleOrThrow().sendMessage(input.gameObject, input.methodName, input.message);
|
|
47
|
+
},
|
|
48
|
+
addListener(eventName, listener) {
|
|
49
|
+
const native = moduleOrThrow();
|
|
50
|
+
return new _reactNative.NativeEventEmitter(native).addListener(`RNUnity:${eventName}`, listener);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=UnityRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_NativeUnityRuntime","_interopRequireDefault","e","__esModule","default","missingModuleError","Error","moduleOrThrow","NativeUnityRuntime","requireText","name","value","length","TypeError","RangeError","UnityRuntime","exports","start","options","detachedBehavior","pause","resume","unload","getState","getDiagnostics","JSON","parse","sendMessage","input","gameObject","methodName","message","addListener","eventName","listener","native","NativeEventEmitter"],"sourceRoot":"../../package","sources":["UnityRuntime.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAA4D,SAAAE,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAU5D,MAAMG,kBAAkB,GAAGA,CAAA,KACzB,IAAIC,KAAK,CACP,+GACF,CAAC;AAEH,SAASC,aAAaA,CAAA,EAAG;EACvB,IAAI,CAACC,2BAAkB,EAAE,MAAMH,kBAAkB,CAAC,CAAC;EACnD,OAAOG,2BAAkB;AAC3B;AAEA,SAASC,WAAWA,CAACC,IAAY,EAAEC,KAAa,EAAQ;EACtD,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACC,MAAM,KAAK,CAAC,EAAE;IACnD,MAAM,IAAIC,SAAS,CAAC,GAAGH,IAAI,6BAA6B,CAAC;EAC3D;EACA,IAAIC,KAAK,CAACC,MAAM,GAAG,IAAI,GAAG,IAAI,EAAE;IAC9B,MAAM,IAAIE,UAAU,CAAC,GAAGJ,IAAI,0BAA0B,CAAC;EACzD;AACF;AAEO,MAAMK,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG;EAC1BE,KAAKA,CAACC,OAA0B,GAAG,CAAC,CAAC,EAAiB;IACpD,OAAOX,aAAa,CAAC,CAAC,CAACU,KAAK,CAACC,OAAO,CAACC,gBAAgB,IAAI,OAAO,CAAC;EACnE,CAAC;EACDC,KAAKA,CAAA,EAAkB;IACrB,OAAOb,aAAa,CAAC,CAAC,CAACa,KAAK,CAAC,CAAC;EAChC,CAAC;EACDC,MAAMA,CAAA,EAAkB;IACtB,OAAOd,aAAa,CAAC,CAAC,CAACc,MAAM,CAAC,CAAC;EACjC,CAAC;EACDC,MAAMA,CAAA,EAAkB;IACtB,OAAOf,aAAa,CAAC,CAAC,CAACe,MAAM,CAAC,CAAC;EACjC,CAAC;EACD,MAAMC,QAAQA,CAAA,EAA+B;IAC3C,OAAQ,MAAMhB,aAAa,CAAC,CAAC,CAACgB,QAAQ,CAAC,CAAC;EAC1C,CAAC;EACD,MAAMC,cAAcA,CAAA,EAA8B;IAChD,OAAOC,IAAI,CAACC,KAAK,CAAC,MAAMnB,aAAa,CAAC,CAAC,CAACiB,cAAc,CAAC,CAAC,CAAC;EAC3D,CAAC;EACDG,WAAWA,CAACC,KAA4B,EAAiB;IACvDnB,WAAW,CAAC,YAAY,EAAEmB,KAAK,CAACC,UAAU,CAAC;IAC3CpB,WAAW,CAAC,YAAY,EAAEmB,KAAK,CAACE,UAAU,CAAC;IAC3CrB,WAAW,CAAC,SAAS,EAAEmB,KAAK,CAACG,OAAO,CAAC;IACrC,OAAOxB,aAAa,CAAC,CAAC,CAACoB,WAAW,CAACC,KAAK,CAACC,UAAU,EAAED,KAAK,CAACE,UAAU,EAAEF,KAAK,CAACG,OAAO,CAAC;EACvF,CAAC;EACDC,WAAWA,CACTC,SAAY,EACZC,QAA2C,EACxB;IACnB,MAAMC,MAAM,GAAG5B,aAAa,CAAC,CAAC;IAC9B,OAAO,IAAI6B,+BAAkB,CAACD,MAAM,CAAC,CAACH,WAAW,CAAC,WAAWC,SAAS,EAAE,EAAEC,QAAQ,CAAC;EACrF;AACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.UnityView = UnityView;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _NativeUnityView = _interopRequireDefault(require("./specs/NativeUnityView.js"));
|
|
9
|
+
var _UnityRuntime = require("./UnityRuntime.js");
|
|
10
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
function UnityView({
|
|
13
|
+
autoStart = true,
|
|
14
|
+
detachedBehavior = 'pause',
|
|
15
|
+
onError,
|
|
16
|
+
...props
|
|
17
|
+
}) {
|
|
18
|
+
(0, _react.useEffect)(() => {
|
|
19
|
+
if (autoStart) {
|
|
20
|
+
_UnityRuntime.UnityRuntime.start({
|
|
21
|
+
detachedBehavior
|
|
22
|
+
}).catch(error => {
|
|
23
|
+
// Runtime errors are emitted natively as well; avoid an unhandled rejection here.
|
|
24
|
+
if (__DEV__) console.error('[RNUnity] autoStart failed', error);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}, [autoStart, detachedBehavior]);
|
|
28
|
+
const Component = _NativeUnityView.default;
|
|
29
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, {
|
|
30
|
+
...props,
|
|
31
|
+
detachedBehavior: detachedBehavior,
|
|
32
|
+
onError: onError
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=UnityView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_NativeUnityView","_interopRequireDefault","_UnityRuntime","_jsxRuntime","e","__esModule","default","UnityView","autoStart","detachedBehavior","onError","props","useEffect","UnityRuntime","start","catch","error","__DEV__","console","Component","NativeUnityView","jsx"],"sourceRoot":"../../package","sources":["UnityView.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,gBAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AAA8C,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAGvC,SAASG,SAASA,CAAC;EACxBC,SAAS,GAAG,IAAI;EAChBC,gBAAgB,GAAG,OAAO;EAC1BC,OAAO;EACP,GAAGC;AACW,CAAC,EAAE;EACjB,IAAAC,gBAAS,EAAC,MAAM;IACd,IAAIJ,SAAS,EAAE;MACbK,0BAAY,CAACC,KAAK,CAAC;QAAEL;MAAiB,CAAC,CAAC,CAACM,KAAK,CAAEC,KAAc,IAAK;QACjE;QACA,IAAIC,OAAO,EAAEC,OAAO,CAACF,KAAK,CAAC,4BAA4B,EAAEA,KAAK,CAAC;MACjE,CAAC,CAAC;IACJ;EACF,CAAC,EAAE,CAACR,SAAS,EAAEC,gBAAgB,CAAC,CAAC;EAEjC,MAAMU,SAAS,GAAGC,wBAEjB;EACD,oBACE,IAAAjB,WAAA,CAAAkB,GAAA,EAACF,SAAS;IAAA,GACJR,KAAK;IACTF,gBAAgB,EAAEA,gBAAiB;IACnCC,OAAO,EAAEA;EAAQ,CAClB,CAAC;AAEN","ignoreList":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "UnityRuntime", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _UnityRuntime.UnityRuntime;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "UnityView", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _UnityView.UnityView;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
var _UnityRuntime = require("./UnityRuntime.js");
|
|
19
|
+
var _UnityView = require("./UnityView.js");
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_UnityRuntime","require","_UnityView"],"sourceRoot":"../../package","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _default = exports.default = _reactNative.TurboModuleRegistry.get('UnityRuntime');
|
|
9
|
+
//# sourceMappingURL=NativeUnityRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","get"],"sourceRoot":"../../../package","sources":["specs/NativeUnityRuntime.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAcpCC,gCAAmB,CAACC,GAAG,CAAO,cAAc,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _codegenNativeComponent = _interopRequireDefault(require("react-native/Libraries/Utilities/codegenNativeComponent"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
var _default = exports.default = (0, _codegenNativeComponent.default)('RNUnityView');
|
|
10
|
+
//# sourceMappingURL=NativeUnityView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","default","_default","exports","codegenNativeComponent"],"sourceRoot":"../../../package","sources":["specs/NativeUnityView.ts"],"mappings":";;;;;;AAKA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAqB9E,IAAAG,+BAAsB,EAAc,aAAa,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../package","sources":["types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { UnityDiagnostics, UnityEventMap, UnityRuntimeState, UnitySendMessageInput, UnityStartOptions, UnitySubscription } from './types';
|
|
2
|
+
export declare const UnityRuntime: {
|
|
3
|
+
start(options?: UnityStartOptions): Promise<void>;
|
|
4
|
+
pause(): Promise<void>;
|
|
5
|
+
resume(): Promise<void>;
|
|
6
|
+
unload(): Promise<void>;
|
|
7
|
+
getState(): Promise<UnityRuntimeState>;
|
|
8
|
+
getDiagnostics(): Promise<UnityDiagnostics>;
|
|
9
|
+
sendMessage(input: UnitySendMessageInput): Promise<void>;
|
|
10
|
+
addListener<K extends keyof UnityEventMap>(eventName: K, listener: (event: UnityEventMap[K]) => void): UnitySubscription;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=UnityRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnityRuntime.d.ts","sourceRoot":"","sources":["../../package/UnityRuntime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAqBjB,eAAO,MAAM,YAAY;oBACR,iBAAiB,GAAQ,OAAO,CAAC,IAAI,CAAC;aAG5C,OAAO,CAAC,IAAI,CAAC;cAGZ,OAAO,CAAC,IAAI,CAAC;cAGb,OAAO,CAAC,IAAI,CAAC;gBAGL,OAAO,CAAC,iBAAiB,CAAC;sBAGpB,OAAO,CAAC,gBAAgB,CAAC;uBAG9B,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;gBAM5C,CAAC,SAAS,MAAM,aAAa,aAC5B,CAAC,YACF,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,GAC1C,iBAAiB;CAIrB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnityView.d.ts","sourceRoot":"","sources":["../../package/UnityView.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,wBAAgB,SAAS,CAAC,EACxB,SAAgB,EAChB,gBAA0B,EAC1B,OAAO,EACP,GAAG,KAAK,EACT,EAAE,cAAc,+BAoBhB"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { UnityRuntime } from './UnityRuntime';
|
|
2
|
+
export { UnityView } from './UnityView';
|
|
3
|
+
export type { UnityDetachedBehavior, UnityDiagnostics, UnityError, UnityErrorEvent, UnityEventMap, UnityMessage, UnityMessageEvent, UnityReady, UnityReadyEvent, UnityRuntimeState, UnitySendMessageInput, UnityStartOptions, UnityStateChange, UnityStateEvent, UnitySubscription, UnityViewProps, } from './types';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../package/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACV,qBAAqB,EACrB,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,cAAc,GACf,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { TurboModule } from 'react-native';
|
|
2
|
+
export interface Spec extends TurboModule {
|
|
3
|
+
start(detachedBehavior: string): Promise<void>;
|
|
4
|
+
pause(): Promise<void>;
|
|
5
|
+
resume(): Promise<void>;
|
|
6
|
+
unload(): Promise<void>;
|
|
7
|
+
getState(): Promise<string>;
|
|
8
|
+
getDiagnostics(): Promise<string>;
|
|
9
|
+
sendMessage(gameObject: string, methodName: string, message: string): Promise<void>;
|
|
10
|
+
addListener(eventName: string): void;
|
|
11
|
+
removeListeners(count: number): void;
|
|
12
|
+
}
|
|
13
|
+
declare const _default: Spec | null;
|
|
14
|
+
export default _default;
|
|
15
|
+
//# sourceMappingURL=NativeUnityRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeUnityRuntime.d.ts","sourceRoot":"","sources":["../../../package/specs/NativeUnityRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,KAAK,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;;AAED,wBAA6D"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ViewProps } from 'react-native';
|
|
2
|
+
import type { DirectEventHandler, Double } from 'react-native/Libraries/Types/CodegenTypes';
|
|
3
|
+
type ReadyEvent = Readonly<{
|
|
4
|
+
state: string;
|
|
5
|
+
generation: Double;
|
|
6
|
+
hostId: string;
|
|
7
|
+
}>;
|
|
8
|
+
type MessageEvent = Readonly<{
|
|
9
|
+
generation: Double;
|
|
10
|
+
message: string;
|
|
11
|
+
}>;
|
|
12
|
+
type StateEvent = Readonly<{
|
|
13
|
+
state: string;
|
|
14
|
+
generation: Double;
|
|
15
|
+
}>;
|
|
16
|
+
type ErrorEvent = Readonly<{
|
|
17
|
+
code: string;
|
|
18
|
+
message: string;
|
|
19
|
+
state: string;
|
|
20
|
+
generation: Double;
|
|
21
|
+
nativeCause?: string;
|
|
22
|
+
}>;
|
|
23
|
+
export interface NativeProps extends ViewProps {
|
|
24
|
+
detachedBehavior?: string;
|
|
25
|
+
onReady?: DirectEventHandler<ReadyEvent>;
|
|
26
|
+
onMessage?: DirectEventHandler<MessageEvent>;
|
|
27
|
+
onStateChange?: DirectEventHandler<StateEvent>;
|
|
28
|
+
onError?: DirectEventHandler<ErrorEvent>;
|
|
29
|
+
}
|
|
30
|
+
declare const _default: import("react-native/Libraries/Utilities/codegenNativeComponent").NativeComponentType<NativeProps>;
|
|
31
|
+
export default _default;
|
|
32
|
+
//# sourceMappingURL=NativeUnityView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeUnityView.d.ts","sourceRoot":"","sources":["../../../package/specs/NativeUnityView.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EACV,kBAAkB,EAClB,MAAM,EACP,MAAM,2CAA2C,CAAC;AAGnD,KAAK,UAAU,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAClF,KAAK,YAAY,GAAG,QAAQ,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AACtE,KAAK,UAAU,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAClE,KAAK,UAAU,GAAG,QAAQ,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC,CAAC;AAEH,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;CAC1C;;AAED,wBAAkE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { NativeSyntheticEvent, ViewProps } from 'react-native';
|
|
2
|
+
export type UnityRuntimeState = 'idle' | 'starting' | 'runningDetached' | 'runningAttached' | 'pausedDetached' | 'pausedAttached' | 'unloading' | 'quitted' | 'failed';
|
|
3
|
+
export type UnityDetachedBehavior = 'pause' | 'keepRunning';
|
|
4
|
+
export interface UnityStartOptions {
|
|
5
|
+
detachedBehavior?: UnityDetachedBehavior;
|
|
6
|
+
}
|
|
7
|
+
export interface UnitySendMessageInput {
|
|
8
|
+
gameObject: string;
|
|
9
|
+
methodName: string;
|
|
10
|
+
message: string;
|
|
11
|
+
}
|
|
12
|
+
export interface UnityError {
|
|
13
|
+
code: string;
|
|
14
|
+
message: string;
|
|
15
|
+
state: UnityRuntimeState;
|
|
16
|
+
generation: number;
|
|
17
|
+
nativeCause?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface UnityMessage {
|
|
20
|
+
generation: number;
|
|
21
|
+
message: string;
|
|
22
|
+
}
|
|
23
|
+
export interface UnityStateChange {
|
|
24
|
+
state: UnityRuntimeState;
|
|
25
|
+
generation: number;
|
|
26
|
+
}
|
|
27
|
+
export interface UnityReady {
|
|
28
|
+
state: UnityRuntimeState;
|
|
29
|
+
generation: number;
|
|
30
|
+
hostId: string;
|
|
31
|
+
}
|
|
32
|
+
export interface UnityDiagnostics {
|
|
33
|
+
state: UnityRuntimeState;
|
|
34
|
+
generation: number;
|
|
35
|
+
hostId?: string;
|
|
36
|
+
pauseReasons: string[];
|
|
37
|
+
lastTransitionAt: number;
|
|
38
|
+
lastError?: UnityError;
|
|
39
|
+
unityVersion?: string;
|
|
40
|
+
reactNativeVersion?: string;
|
|
41
|
+
packageVersion: string;
|
|
42
|
+
}
|
|
43
|
+
export type UnityReadyEvent = NativeSyntheticEvent<UnityReady>;
|
|
44
|
+
export type UnityMessageEvent = NativeSyntheticEvent<UnityMessage>;
|
|
45
|
+
export type UnityStateEvent = NativeSyntheticEvent<UnityStateChange>;
|
|
46
|
+
export type UnityErrorEvent = NativeSyntheticEvent<UnityError>;
|
|
47
|
+
export interface UnityViewProps extends ViewProps {
|
|
48
|
+
autoStart?: boolean;
|
|
49
|
+
detachedBehavior?: UnityDetachedBehavior;
|
|
50
|
+
onReady?: (event: UnityReadyEvent) => void;
|
|
51
|
+
onMessage?: (event: UnityMessageEvent) => void;
|
|
52
|
+
onStateChange?: (event: UnityStateEvent) => void;
|
|
53
|
+
onError?: (event: UnityErrorEvent) => void;
|
|
54
|
+
}
|
|
55
|
+
export interface UnityEventMap {
|
|
56
|
+
stateChange: UnityStateChange;
|
|
57
|
+
message: UnityMessage;
|
|
58
|
+
error: UnityError;
|
|
59
|
+
}
|
|
60
|
+
export interface UnitySubscription {
|
|
61
|
+
remove(): void;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../package/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,UAAU,GACV,iBAAiB,GACjB,iBAAiB,GACjB,gBAAgB,GAChB,gBAAgB,GAChB,WAAW,GACX,SAAS,GACT,QAAQ,CAAC;AAEb,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,aAAa,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CAC1C;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,iBAAiB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,iBAAiB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,iBAAiB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,iBAAiB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,eAAe,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;AAC/D,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;AACnE,MAAM,MAAM,eAAe,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;AACrE,MAAM,MAAM,eAAe,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;AAE/D,MAAM,WAAW,cAAe,SAAQ,SAAS;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC/C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,gBAAgB,CAAC;IAC9B,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,IAAI,IAAI,CAAC;CAChB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { NativeEventEmitter } from 'react-native';
|
|
2
|
+
import NativeUnityRuntime from './specs/NativeUnityRuntime';
|
|
3
|
+
import type {
|
|
4
|
+
UnityDiagnostics,
|
|
5
|
+
UnityEventMap,
|
|
6
|
+
UnityRuntimeState,
|
|
7
|
+
UnitySendMessageInput,
|
|
8
|
+
UnityStartOptions,
|
|
9
|
+
UnitySubscription,
|
|
10
|
+
} from './types';
|
|
11
|
+
|
|
12
|
+
const missingModuleError = () =>
|
|
13
|
+
new Error(
|
|
14
|
+
'@hugebug4ever/react-native-unity is not linked. Expo Go is unsupported; use prebuild and a development build.',
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
function moduleOrThrow() {
|
|
18
|
+
if (!NativeUnityRuntime) throw missingModuleError();
|
|
19
|
+
return NativeUnityRuntime;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function requireText(name: string, value: string): void {
|
|
23
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
24
|
+
throw new TypeError(`${name} must be a non-empty string`);
|
|
25
|
+
}
|
|
26
|
+
if (value.length > 1024 * 1024) {
|
|
27
|
+
throw new RangeError(`${name} exceeds the 1 MiB limit`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const UnityRuntime = {
|
|
32
|
+
start(options: UnityStartOptions = {}): Promise<void> {
|
|
33
|
+
return moduleOrThrow().start(options.detachedBehavior ?? 'pause');
|
|
34
|
+
},
|
|
35
|
+
pause(): Promise<void> {
|
|
36
|
+
return moduleOrThrow().pause();
|
|
37
|
+
},
|
|
38
|
+
resume(): Promise<void> {
|
|
39
|
+
return moduleOrThrow().resume();
|
|
40
|
+
},
|
|
41
|
+
unload(): Promise<void> {
|
|
42
|
+
return moduleOrThrow().unload();
|
|
43
|
+
},
|
|
44
|
+
async getState(): Promise<UnityRuntimeState> {
|
|
45
|
+
return (await moduleOrThrow().getState()) as UnityRuntimeState;
|
|
46
|
+
},
|
|
47
|
+
async getDiagnostics(): Promise<UnityDiagnostics> {
|
|
48
|
+
return JSON.parse(await moduleOrThrow().getDiagnostics()) as UnityDiagnostics;
|
|
49
|
+
},
|
|
50
|
+
sendMessage(input: UnitySendMessageInput): Promise<void> {
|
|
51
|
+
requireText('gameObject', input.gameObject);
|
|
52
|
+
requireText('methodName', input.methodName);
|
|
53
|
+
requireText('message', input.message);
|
|
54
|
+
return moduleOrThrow().sendMessage(input.gameObject, input.methodName, input.message);
|
|
55
|
+
},
|
|
56
|
+
addListener<K extends keyof UnityEventMap>(
|
|
57
|
+
eventName: K,
|
|
58
|
+
listener: (event: UnityEventMap[K]) => void,
|
|
59
|
+
): UnitySubscription {
|
|
60
|
+
const native = moduleOrThrow();
|
|
61
|
+
return new NativeEventEmitter(native).addListener(`RNUnity:${eventName}`, listener);
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import type { ComponentType } from 'react';
|
|
3
|
+
import NativeUnityView from './specs/NativeUnityView';
|
|
4
|
+
import { UnityRuntime } from './UnityRuntime';
|
|
5
|
+
import type { UnityViewProps } from './types';
|
|
6
|
+
|
|
7
|
+
export function UnityView({
|
|
8
|
+
autoStart = true,
|
|
9
|
+
detachedBehavior = 'pause',
|
|
10
|
+
onError,
|
|
11
|
+
...props
|
|
12
|
+
}: UnityViewProps) {
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (autoStart) {
|
|
15
|
+
UnityRuntime.start({ detachedBehavior }).catch((error: unknown) => {
|
|
16
|
+
// Runtime errors are emitted natively as well; avoid an unhandled rejection here.
|
|
17
|
+
if (__DEV__) console.error('[RNUnity] autoStart failed', error);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}, [autoStart, detachedBehavior]);
|
|
21
|
+
|
|
22
|
+
const Component = NativeUnityView as unknown as ComponentType<
|
|
23
|
+
Omit<UnityViewProps, 'autoStart'>
|
|
24
|
+
>;
|
|
25
|
+
return (
|
|
26
|
+
<Component
|
|
27
|
+
{...props}
|
|
28
|
+
detachedBehavior={detachedBehavior}
|
|
29
|
+
onError={onError}
|
|
30
|
+
/>
|
|
31
|
+
);
|
|
32
|
+
}
|
package/package/index.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export { UnityRuntime } from './UnityRuntime';
|
|
2
|
+
export { UnityView } from './UnityView';
|
|
3
|
+
export type {
|
|
4
|
+
UnityDetachedBehavior,
|
|
5
|
+
UnityDiagnostics,
|
|
6
|
+
UnityError,
|
|
7
|
+
UnityErrorEvent,
|
|
8
|
+
UnityEventMap,
|
|
9
|
+
UnityMessage,
|
|
10
|
+
UnityMessageEvent,
|
|
11
|
+
UnityReady,
|
|
12
|
+
UnityReadyEvent,
|
|
13
|
+
UnityRuntimeState,
|
|
14
|
+
UnitySendMessageInput,
|
|
15
|
+
UnityStartOptions,
|
|
16
|
+
UnityStateChange,
|
|
17
|
+
UnityStateEvent,
|
|
18
|
+
UnitySubscription,
|
|
19
|
+
UnityViewProps,
|
|
20
|
+
} from './types';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TurboModule } from 'react-native';
|
|
2
|
+
import { TurboModuleRegistry } from 'react-native';
|
|
3
|
+
|
|
4
|
+
export interface Spec extends TurboModule {
|
|
5
|
+
start(detachedBehavior: string): Promise<void>;
|
|
6
|
+
pause(): Promise<void>;
|
|
7
|
+
resume(): Promise<void>;
|
|
8
|
+
unload(): Promise<void>;
|
|
9
|
+
getState(): Promise<string>;
|
|
10
|
+
getDiagnostics(): Promise<string>;
|
|
11
|
+
sendMessage(gameObject: string, methodName: string, message: string): Promise<void>;
|
|
12
|
+
addListener(eventName: string): void;
|
|
13
|
+
removeListeners(count: number): void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default TurboModuleRegistry.get<Spec>('UnityRuntime');
|
|
17
|
+
|