Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity多人游戏从Unityscript调用C#_C#_Unity3d_Unityscript_Photon - Fatal编程技术网

Unity多人游戏从Unityscript调用C#

Unity多人游戏从Unityscript调用C#,c#,unity3d,unityscript,photon,C#,Unity3d,Unityscript,Photon,我正在尝试使用我的子弹收集脚本来删除并在玩家的生命值下降到1以下时使其重生。然而,我调用unity c#函数的脚本不太正常,它说我试图调用的函数是 资产/级别/资源/bulletCollision.js(27,16):BCE0019: “SpawnMyPlayer”不是“UnityEngine.Component”的成员 这也是复活被杀玩家的正确方法吗 NetworkManager.cs: 使用UnityEngine; 使用系统集合; 公共类网络管理器:MonoBehavior{ 公共摄像机、备

我正在尝试使用我的子弹收集脚本来删除并在玩家的生命值下降到1以下时使其重生。然而,我调用unity c#函数的脚本不太正常,它说我试图调用的函数是

资产/级别/资源/bulletCollision.js(27,16):BCE0019: “SpawnMyPlayer”不是“UnityEngine.Component”的成员

这也是复活被杀玩家的正确方法吗

NetworkManager.cs:

使用UnityEngine;
使用系统集合;
公共类网络管理器:MonoBehavior{
公共摄像机、备用摄像机;
//用于初始化
繁殖点[]繁殖点;
无效开始(){
Connect();
sprownspots=GameObject.FindObjectsOfType();
}
void Connect(){
PhotoNetwork.ConnectUsingSettings(“1.0.0”);
}
void OnGui(){
Log(“OnGui”+PhotonNetwork.connectionStateDetailed.ToString());
Label(PhotonNetwork.connectionStateDetailed.ToString());
}
//每帧调用一次更新
在JoinedLobble()上无效{
Debug.Log(“加入的大厅”);
PhotonNetwork.joinRoom();
}
void OnPhotonRandomJoinFailed(){
Log(“失败的连接”);
PhotonNetwork.CreateRoom(空);
}
void OnJoinedRoom(){
调试日志(“已加入的房间”);
生成myplayer();
}
void-myplayer(){
SpawnSpot mySpawnSpot=spawnSpots[Random.Range(0,spawnSpots.Length)];
GameObject myPlayer=PhotonNetwork.Instantiate(“Player”,mySpawnSpot.transform.position,mySpawnSpot.transform.rotation,0);
standbyCamera.enabled=错误;
((MonoBehavior)myPlayer.GetComponent(“FPInputController”)).enabled=true;
((monobhavior)myPlayer.GetComponent(“PlayerCounters”).enabled=true;
((MonoBehavior)myPlayer.GetComponent(“罐体”)).enabled=true;
((MonoBehavior)myPlayer.GetComponent(“tankMove”).enabled=true;
((MonoBehavior)myPlayer.GetComponent(“CharacterMotor”).enabled=true;
myPlayer.transform.FindChild(“主摄像头”).gameObject.SetActive(true);
}
}
子弹碰撞。js:

#pragma strict
var-myClip:音频剪辑;
var损害:浮动=0;
var bullet_force:浮动=射击力;
函数onCollisionCenter(碰撞:碰撞)
{
摧毁(游戏对象);
if(collision.transform.name==(“罐体”)){
var hitCount=gameObject.Find(“hitCount”).GetComponent(GUIText);
损伤=随机范围(10,30);
PlayerCounters.playerHealth-=伤害;
hitCount.text=“命中:”+damage.ToString();
音频源.PlayClipAtPoint(myClip,transform.position);

如果(PlayerCounters.playerHealth您的问题与Unity3d在过程中编译c#和javascript有关。javascript文件在c#文件之前编译,因此无法找到您的c#类

这是有办法的

您必须在资产文件夹中创建一个名为“Plugins”的文件夹,然后将您的c#script移动到该文件夹。它将在您的javascript文件之前编译。您应该会发现您的JS脚本现在可以引用c#script

代码:

    var cs = GameObject.Find("CSharpGameObj");
    var script :NetworkManager;
    script = cs.GetComponent("NetworkManager");
    script.SpawnMyPlayer();
顺便说一句,您必须将SpawnMyPlayer函数公开,在其声明中添加public,然后才能从外部访问它:

    public void SpawnMyPlayer(){

我真的认为将代码重构为纯C#是值得的。如果你不这样做,你会很痛苦。啊,是的,这可能是个好主意,但所有的教程都是用javascript编写的。我不会破坏播放器对象,而是重新定位播放器的位置,并将播放器的状态重置为任何不需要的状态继承人的默认恢复状态将是。因为只保留相同的实例可能更便宜。在处理更多可支配资产(如敌人和物品)时,可以使用销毁。非常感谢,我是unity的新手,特别是c#我感谢你们所有人的帮助。如果您满意,请确认答案。它奏效了但最后我把所有的东西都重新写给了c#