void itemClick() // 아이템 마우스 클릭 : ItemCollectScene(아이템 Btn이미지 변경), GameScene(아이템 던지기) { highlightBox.SetActive(false); Ray cameraRay = playerCamera.ScreenPointToRay(Input.mousePosition); RaycastHit rayHit; if (Physics.Raycast(cameraRay, out rayHit)) { GameObject hitObj = rayHit.transform.gameObject; if (sceneName == "ItemCollectScene") { bool possess = false; if (hitObj.GetComponentInChildren <outline>() != null) // outline 스크립트 있는 지 여부 판단, 없는 오브젝트 무시 { possess = true; } if (possess == true && hitObj.GetComponentInChildren <outline>().isActiveAndEnabled == true) // 아이템 가방창에 이미지 변경 { if (hitObj.tag == "item") { s_itemBtn.InputGetItemArr(hitObj); } else if (hitObj.tag == "weapon" || hitObj.tag == "armor") { s_itemBtn.GetComponent <ItemBtn>().inputGameObj(hitObj); } } } else if (sceneName == "GameScene") //아웃라인 활성화 상태인 아이템 클릭 후 캐릭터 머리 위로 옮기고 서버에 주운 아이템 정보 보내기 { outline ObjOutline = hitObj.GetComponent <outline>(); if (hitObj.layer == (int)eLAYER.TOUCHABLE && ObjOutline.isActiveAndEnabled == true) { hitObj.GetComponent <Rigidbody>().useGravity = false; Vector3 newPos = transform.position; newPos.y += 5; hitObj.transform.position = newPos; hitObj.GetComponent <outline>().enabled = false; getItem = hitObj; int itemNum = s_itemSpawn.GetObjNum(hitObj); sGetObj getObj = new sGetObj(itemNum); SocketServer.SingleTonServ().SendMsg(getObj); Debug.Log("send Succ"); transform.Find("Canvas").Find("ThrowPoint").gameObject.SetActive(true); } else { highlightBox.SetActive(true); } } } else { highlightBox.SetActive(true); } }
void itemClick() // 던질 아이템 클릭 가능 여부 체크 및 클릭한 아이템 머리 위로 위치 이동, targetZone 생성 조건 On! { highlightBox.SetActive(false); Ray cameraRay = playerCamera.ScreenPointToRay(Input.mousePosition); RaycastHit rayHit; if (Physics.Raycast(cameraRay, out rayHit)) { GameObject hitObj = rayHit.transform.gameObject; outline ObjOutline = hitObj.GetComponent <outline>(); if (hitObj.layer == (int)eLAYER.TOUCHABLE && ObjOutline.isActiveAndEnabled == true) { Debug.Log("click"); hitObj.GetComponent <Rigidbody>().useGravity = false; Vector3 newPos = transform.position; newPos.y += 5; hitObj.transform.position = newPos; getItem = hitObj; hitObj.GetComponent <Rigidbody>().useGravity = false; int itemNum = s_itemSpawn2.GetObjNum(hitObj); sGetObj getObj = new sGetObj(itemNum); SocketServer.SingleTonServ().SendMsg(getObj); Debug.Log("send Succ"); transform.Find("Canvas").Find("ThrowPoint").gameObject.SetActive(true); } else { highlightBox.SetActive(true); } } else { highlightBox.SetActive(true); } }
private static void ReceiveCallBack(IAsyncResult ar) //서버에게 신호를 받았을 때 { RecvData recvData = (RecvData)ar.AsyncState; //리시브된 데이터 int receive = recvData.socket.EndReceive(ar); //리시브된 정보가 있는지 체크 if (receive <= 0) //서버 종료 { recvData.socket.Close(); //소켓을 닫음 Application.Quit(); return; } IntPtr buff = Marshal.AllocHGlobal(recvData.buffer.Length); //받은 byte 데이터를 struct로 변환 Marshal.Copy(recvData.buffer, 0, buff, recvData.buffer.Length); Type type = typeof(sGameRoom); room = (sGameRoom)Marshal.PtrToStructure(buff, type); if (room.flag == (int)eMSG.em_LOGIN) { Type m_type = typeof(sLogin); sLogin loginInfo = (sLogin)Marshal.PtrToStructure(buff, m_type); userScript.LoginResult(loginInfo.nick, loginInfo.loginSucc); } else if (room.flag == (int)eMSG.em_LOGINCHECK) { Type m_type = typeof(sLoginCheck); sLoginCheck loginChk = (sLoginCheck)Marshal.PtrToStructure(buff, m_type); fScript.FriendAccCheck(loginChk.nick, loginChk.loginChk); } else if (room.flag == (int)eMSG.em_MATCHREQUEST) { Type m_type = typeof(sMatchReq); sMatchReq matchReq = (sMatchReq)Marshal.PtrToStructure(buff, m_type); fScript.MatchReqResult(matchReq.sendUserNick, matchReq.matchSucc); } else if (room.flag == (int)eMSG.em_ENTER) //매칭 버튼을 눌렀다는 정보 { if (room.userNum == 0) //상대가 없음 { gScript.Matching(); } else //상대가 접속 { enterNum = room.userNum; gScript.MatchSucc(); } } else if (room.flag == (int)eMSG.em_CHARINFO) //아이템 선택이 끝났다는 정보 { Type m_type = typeof(sCharInfo); sCharInfo charInfo = (sCharInfo)Marshal.PtrToStructure(buff, m_type); if (enterNum == 1) //내가 먼저 입장 { sScript.SpawnInfo("Spawn1", "Spawn2", charInfo); } else if (enterNum == 2) //상대가 먼저 입장 { sScript.SpawnInfo("Spawn2", "Spawn1", charInfo); } } else if (room.flag == (int)eMSG.em_READY) //두 유저 모두 준비되었다는 정보 { sScript.SpawnReady(); } else if (eScript != null && room.flag == (int)eMSG.em_MOVE) //적의 좌표, 회전 정보 { Type m_type = typeof(sMove); sMove move = (sMove)Marshal.PtrToStructure(buff, m_type); Vector3 enemyPos = new Vector3(move.x, move.y, move.z); Quaternion enemyRot = new Quaternion(move.rotX, move.rotY, move.rotZ, move.rotW); eScript.EnemyMove(enemyPos, enemyRot); } else if (room.flag == (int)eMSG.em_ATK) //적이 공격했다는 정보 { Type m_type = typeof(sAtk); sAtk atk = (sAtk)Marshal.PtrToStructure(buff, m_type); eScript.EnemyAtk(atk.atkAni); } else if (room.flag == (int)eMSG.em_HIT) //내가 공격을 성공함 { Type m_type = typeof(sHit); sHit hit = (sHit)Marshal.PtrToStructure(buff, m_type); pScript.ChangePlayerHp(hit.hp); pScript.PlayerDamage(hit); } else if (room.flag == (int)eMSG.em_INFO) //적의 hp정보가 변한경우 { Type m_type = typeof(sChangeInfo); sChangeInfo hpInfo = (sChangeInfo)Marshal.PtrToStructure(buff, m_type); eScript.ChangeEnemyHp(hpInfo.hp); } else if (room.flag == (int)eMSG.em_ITEMSPAWN) { Type m_type = typeof(sItemSpawn); sItemSpawn itemSpawn = (sItemSpawn)Marshal.PtrToStructure(buff, m_type); pScript.passOnItemSpawnInfo(itemSpawn.itemKind); pScript.GetAtkMgrFromServer(true); } else if (room.flag == (int)eMSG.em_USEITEM) //아이템 사용 { Type m_type = typeof(sUseItem); sUseItem useItem = (sUseItem)Marshal.PtrToStructure(buff, m_type); pScript.ChangeItemImg(useItem.itemNum, true); pScript.ChangePlayerHp(useItem.hp); pScript.ChangePlayerSpeed(useItem.speed); } else if (room.flag == (int)eMSG.em_ENDITEM) //아이템 시간 끝 { Type m_type = typeof(sEndItem); sEndItem endItem = (sEndItem)Marshal.PtrToStructure(buff, m_type); pScript.ChangeItemImg(endItem.itemNum, false); pScript.ChangePlayerSpeed(endItem.speed); } else if (room.flag == (int)eMSG.em_GETOBJ) //던질 물건 잡기 { Type m_type = typeof(sGetObj); sGetObj getObj = (sGetObj)Marshal.PtrToStructure(buff, m_type); Debug.Log("from server get succ"); eScript.GetThrowObj(getObj.itemNum); } else if (room.flag == (int)eMSG.em_THROWOBJ) //물건 던지기 { eScript.ThrowObj(); Debug.Log("from server throw succ"); } else if (room.flag == (int)eMSG.em_END) //게임이 종료되었을 경우 { Type m_type = typeof(sEnd); sEnd esc = (sEnd)Marshal.PtrToStructure(buff, m_type); gameResult = esc.result; enemyNick = esc.enemyNick; if (pScript == null) { sScript.GameEndTrue(); } else { pScript.GameEndTrue(); } } else if (room.flag == (int)eMSG.em_CHAT) //채팅 { Type m_type = typeof(sChat); sChat chat = (sChat)Marshal.PtrToStructure(buff, m_type); string nowChat = new string(chat.chat); chatScript.ChatRecv(nowChat); } }