I   회사소개  I  사이트맵  I  도움말
인기검색어
  ID저장
 
회원가입 I 아이디/비밀번호찾기
게시판
ㆍ공지사항
ㆍFAQ 게시판
ㆍ도서문의 게시판
ㆍ부록CD 문의 게시판
ㆍ이벤트 ON
자료실
ㆍ통합자료실
ㆍ인포북 전용 자료실
ㆍWrox 전용 자료실
ㆍ기타 자료실
ㆍ보도 자료실
ㆍ자료 요청실
페이스북 블로그 네이버포스트
게시판 관련분류 : 게시판
유니티로 만드는 네트워크 게임 개발
9334 2018-06-05 오후 4:23:26
운영자
-------------------------------------------
>-------------------------------------------
>>2-4까지 진행했을때 (page 238)
>>
>>Update 메소드에 발사 시키는 코드
>>if (Input.GetKeyDown(KeyCode.Space)) { CmdSpawnIt(); }
>>를 넣고 빌드를 해서
>>
>>호스트 클라이언트 2개 창을 실행 했을때
>>호스트의 로칼플레어에서 스페이스를 누르면 동시에 2개 sphere에서 모두 큐브가 발사가 되고
>>리모트 클라이언트에서는 큐브가 발사는 되지만 큐브가 앞으로 발사가 되지 않고
>>그냥 아래로 추락해 버립니다. (앞으로 향하는 힘을 받지 못하고 중력에 의해 아래로 떨어지는 느낌)
>>
>>반대로 리모트 클라이언트에서 발사를 하면 이 sphere에서만 발사가 되지만 큐브가 아래로 떨어집니다.
>>호스트쪽의 로컬 플레이어에서는 큐브가 정상적으로 발사가 됩니다.
>>
>>수차례 해 봤을대 동일한 증세가 나타나서
>>혹시 문제가 있는 건지
>>아니면 제가 잘못 적었다면
>>이상태때의 SphereScript.cs의 내용를 봤으면 좋겠습니다.
>-------------------------------------------
>
>
>안녕하세요?
>정보문화사입니다.
>

SphereScript.cs 파일은 아래와 같습니다.

-------------------------------------------
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;

public class SphereScript : NetworkBehaviour {

Text text;
public GameObject cube;

[SyncVar(hook = "OnCountChange")]
int count;

private static System.DateTime startTime;
public override void OnStartServer()
{
startTime = System.DateTime.Now;
}

public override void OnStartLocalPlayer()
{
Debug.Log("SphereScript :: OnStartLocalPlayer");
base.OnStartLocalPlayer();
Renderer r = GetComponent();
Color c = Color.red;
r.material.color = c;
}

void Start () {
if (isLocalPlayer)
{
text = GameObject.Find("MsgText").GetComponent();
}
}

void Update () {
if (isServer)
{
Count();
}
if (isLocalPlayer)
{
//UpdateCount();
Move();
}
if (Input.GetKeyDown(KeyCode.Space))
{
CmdSpawnIt();
}
}

[ClientCallback]
void OnCountChange(int newVal)
{
Debug.Log(this.netId + " Value : " + newVal);
text.text = "Client : " + count;
}

[ServerCallback]
void Count()
{
if (!isServer)
{
return;
}

int count = (int)((System.DateTime.Now - startTime).TotalSeconds);
RpcSetCount(count);
//++count;
}

[ClientCallback]
void RpcSetCount(int n)
{
if(text != null)
{
text.text = "Client : " + n;
}
}

[ClientCallback]
void UpdateCount()
{
text.text = "Client : " + count;
}

[ClientCallback]
void Move()
{
if (!isLocalPlayer)
{
return;
}

Vector3 v = transform.position;
v.z -= 5;
v.y += 3;
Camera.main.transform.position = v;
}

[ClientCallback]
private void FixedUpdate()
{
if (!isLocalPlayer)
{
return;
}

float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
CmdMoveSphere(x, z);
}

//Sphere 이동
[Command]
public void CmdMoveSphere(float x, float z)
{
Vector3 v = new Vector3(x, 0, z) * 10f; //적당히 조정
GetComponent().AddForce(v);
}

[Command]
public void CmdSpawnIt()
{
Debug.Log("Spawned.");
GameObject obj = Instantiate(
cube,
transform.position,
Quaternion.Euler(new Vector3(0, 0, 0))
);
NetworkServer.Spawn(obj);
Rigidbody r = obj.GetComponent();
Vector3 v = Camera.main.transform.forward;
v.y += 1f;
r.AddForce(v * 1000);
r.AddTorque(new Vector3(10f, 0f, 10) * 100);
}

}
  
                                  
회사소개      개인정보취급방침      고객센터     사이트맵      도움말