나는 자신의 체력이 1 이하로 떨어지면 내 총알 컬렉션 스크립트를 사용하여 플레이어를 삭제하고 다시 생성하려고합니다. 그러나 유니티 C# 함수를 호출하는 스크립트는 제대로 작동하지 않습니다. BCE0019 : 전화하려고 함수 메신저유니티 멀티 플레이 Respawn Unityscript에서 C# 호출하기
자산/레벨/자원/bulletCollision.js (27,16)라고 'SpawnMyPlayer' 'UnityEngine.Component'의 구성원이 아닙니다.
죽은 플레이어를 다시 부활시키는 적절한 방법입니까?
NetworkManager.cs :
using UnityEngine;
using System.Collections;
public class NetworkManager : MonoBehaviour {
public Camera standbyCamera;
// Use this for initialization
SpawnSpot[] spawnSpots;
void Start() {
Connect();
spawnSpots = GameObject.FindObjectsOfType<SpawnSpot>();
}
void Connect(){
PhotonNetwork.ConnectUsingSettings ("1.0.0");
}
void OnGui(){
Debug.Log ("OnGui" + PhotonNetwork.connectionStateDetailed.ToString());
GUILayout.Label (PhotonNetwork.connectionStateDetailed.ToString());
}
// Update is called once per frame
void OnJoinedLobby() {
Debug.Log ("Joined Lobby");
PhotonNetwork.JoinRandomRoom();
}
void OnPhotonRandomJoinFailed(){
Debug.Log ("Failed Join");
PhotonNetwork.CreateRoom (null);
}
void OnJoinedRoom() {
Debug.Log ("Joined Room");
SpawnMyPlayer();
}
void SpawnMyPlayer(){
SpawnSpot mySpawnSpot = spawnSpots [ Random.Range (0, spawnSpots.Length) ];
GameObject myPlayer = PhotonNetwork.Instantiate ("Player", mySpawnSpot.transform.position, mySpawnSpot.transform.rotation, 0);
standbyCamera.enabled = false;
((MonoBehaviour)myPlayer.GetComponent("FPSInputController")).enabled = true;
((MonoBehaviour)myPlayer.GetComponent("PlayerCounters")).enabled = true;
((MonoBehaviour)myPlayer.GetComponent("Tankbody")).enabled = true;
((MonoBehaviour)myPlayer.GetComponent("tankMove")).enabled = true;
((MonoBehaviour)myPlayer.GetComponent("CharacterMotor")).enabled = true;
myPlayer.transform.FindChild("Main Camera").gameObject.SetActive(true);
}
}
총알 collision.js :
#pragma strict
var myClip: AudioClip;
var damage :float = 0;
var bullet_force: float = shoot.shootForce;
function OnCollisionEnter (collision : Collision)
{
Destroy(gameObject);
if(collision.transform.name ==("TankBody")){
var hitCount = gameObject.Find("HitCount").GetComponent(GUIText);
damage = Random.Range(10,30);
PlayerCounters.playerHealth -= damage;
hitCount.text = "Hit: " + damage.ToString();
AudioSource.PlayClipAtPoint(myClip, transform.position);
if(PlayerCounters.playerHealth <0){
Destroy(gameObject.Find("Player"));
PlayerCounters.playerHealth = 0;
PlayerCounters.playerKills += 1;
var cs = GameObject.Find("CSharpGameObj");
var script = cs.GetComponent("NetworkManager");
script.SpawnMyPlayer();
}
}
}
I : 그것은 외부에서 액세스 할 수 있습니다 전에 선언 공공을 추가하여 사용자가 SpawnMyPlayer 기능을 공개해야하는 방식으로
: 코드에서
순수한 C#이되도록 코드를 리팩터링하는 동안 가치가 있다고 생각하십시오. 네가 그렇게하지 않으면 너에게 고통 스러울거야. –
어쩌면 좋은 생각이지만, 모든 자습서는 항상 자바 스크립트에 있습니다. –
플레이어 개체를 파괴하는 대신 플레이어의 위치를 다시 지정하고 플레이어의 상태를 기본 respawn 상태로 재설정합니다. 왜냐하면 그것보다 더 많은 가능성이 같은 인스턴스를 유지하기 위해 저렴합니다. Destroy를 사용하면 적과 아이템과 같은 더 많은 일회용 자산을 다룰 때 사용할 수 있습니다. – Terrance