Momentan arbeite ich mit Angular2 Version 2.1.2 mit einem Unity Visualizer, der mit Unity 5.5 erstellt wurde.Aufruf einer Angular2-Funktion von Unity WebGL
Was ich tun muss, ist von Unity zu Angular2 zu kommunizieren.
ich Code ähnlich mit unter
public void GetBillOfMaterials(string callbackFn)
{
var result = LightSystem.BillOfMaterials.Aggregate("", (current, material) => current + (material + Environment.NewLine));
Application.ExternalCall(callbackFn, result);
}
Wo die obige Funktion in Angular2 wie unten
public GetBillOfMaterial()
{
SendMessage("Manager", "GetBillOfMaterials", "alert");
}
Das Problem genannt werden würde, ist, dass wenn ich versuche, jede angular2 Funktion innerhalb des „callbackFn“ es wird meine Funktion nicht finden.
Die Funktion I ist innerhalb eines Dienstes zu nennen bin versucht, die wie folgt aussieht:
import { Injectable } from '@angular/core';
import { FinishService } from "./sysWideComps/finish/finish.service";
import { ColorService } from "./sysWideComps/colorTemp/color.service";
import { CircuitService } from "./filters/tabs/circuit/circuit-service";
import { StandoffService } from "./filters/tabs/standoff/standoff-tab.service";
@Injectable()
export class UnityService {
private isFirstCall: boolean = true;
constructor(private colorService: ColorService, private finishService:FinishService, private circuitService: CircuitService, private standoffService: StandoffService) { }
public ChangeFinish(finishType: string) {
console.log(`This is the finish type ${finishType}`);
this.sendMsgParam("ChangeFinish", finishType);
}
public ChangeColorTemp(colorTemp: number) {
this.sendMsgParam("ChangeColorTemperature", colorTemp);
}
public ChangeCircuit(circuitType: string) {
this.sendMsgParam("ChangeCircuit", circuitType);
}
public CreateModel(params: string) {
if (this.isFirstCall) {
this.ChangeCircuit(this.circuitService.getCircuit());
this.ChangeFinish(this.finishService.getFinish().FinishName.replace(" ", ""));
this.ChangeStandoffLength(this.standoffService.getStandoffLength());
//Dropdown goes here
let tempCTemp = this.colorService.getColorTemp().Temperature.replace("k", "");
let tempNum: number =+ tempCTemp;
this.ChangeColorTemp(tempNum);
this.isFirstCall = false;
}
this.sendMsgParam("CreateModel", params);
}
public Delete() {
this.sendMsg("Delete");
}
public ResetView() {
this.sendMsg("ResetCamera");
}
public RotateObject() {
this.sendMsg("RotateCurrentObject");
}
public Unselect() {
this.sendMsg("Unselect");
}
ChangeStandoffLength(input: number) {
this.sendMsgParam("ChangeSystemDropdownLength", input.toString());
}
public AddStandoff(params: string) {
let data: string = params;
this.sendMsgParam("AddStandoffs", data);
}
public GetBillOfMaterial() {
SendMessage("Manager", "GetBillOfMaterials", "alert");
}
public testFunction(input: string) {
alert(input);
}
sendMsgParam(functionName: string, params: any) {
SendMessage("Manager", functionName, params);
}
sendMsg(functionName: string) {
SendMessage("Manager", functionName);
}
}
muß ich grundsätzlich in der Lage sein, „Testfunction“ zu nennen Application.ExternalCall innerhalb des oben genannten Service von Unity mit() oder welche Funktion auch immer funktionieren würde.
Lassen Sie mich wissen, ob es noch weitere Erklärungen gibt, die ich machen kann.
Danke!
'testFunction' befindet sich in einem Angular-Modul, so dass es ungefähr so aussieht wie' Application.ExternalCall ("UnityService.testFunction", "Hello eckig"); '. –
Haben Sie versucht, 'Application.ExternalCall' zu verwenden? Was hat damit funktioniert oder nicht? – rutter
Ich habe versucht Application.ExternalCall ("testFunction", "Hallo") und das hat nicht funktioniert, aber ich werde versuchen, das Scoping, um zu sehen, ob das es behebt. Edit: Ich habe versucht zu "UnityService.testFunction" Scoping und das hat nicht funktioniert – NewDeveloper