photonView.RequestOwnership ();это не работает (unity3d) - PullRequest
0 голосов
/ 14 февраля 2019

Я создаю многопользовательскую игру, и я хотел бы вставить систему захвата, я знаю, что я должен поставить photonView.RequestOwnership ();но я делаю это, это не дает мне ошибки, только когда я беру объект, не заставляет меня брать, вместо этого, если я не помещаю photonView.RequestOwnership ();это прекрасно работает, как мне это решить?

использовать сеть фотонов на Unity 3D

на Photonview Я уже положил на "TakeOver"

вот коды файлов

GrabObjects.cs photonView.RequestOwnership ();Я поместил это в функцию, так что все в порядке?Вы делаете это хорошо?

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

[RequireComponent(typeof (PhotonView))]
public class GrabObjects : Photon.MonoBehaviour
{


public float grabPower = 10.0f; 
public float throwPower = 25.0f;
public float RayDistance = 3.0f;
public LayerMask layerMask;
private bool grab, drop = false;

public Transform pos;
public float adjust;
Rigidbody obj;

void Update()
{ 

if (Input.GetKeyDown(KeyCode.Mouse1))
{
RaycastHit hit;
if(Physics.Raycast(transform.position, transform.forward, out hit, RayDistance, layerMask.value))
{
Pickable pickable = hit.collider.GetComponent();
if(pickable)
{
/// I put it here 
photonView.RequestOwnership();
grab = true;
obj = hit.rigidbody;
obj.isKinematic = true;
obj.GetComponent().enabled = false;
obj.transform.parent = pos;
} 
}
}   

if (Input.GetKeyUp(KeyCode.Mouse1))
{ 
if(grab)
{
StartCoroutine(PrepareToDrop(3f));
}   
}

if (Input.GetKeyDown(KeyCode.Mouse0))
{ 
if(grab)
{
StartCoroutine(PrepareToDrop(throwPower));
}   
}

if(grab)
{   
obj.transform.position = Vector3.Lerp(obj.transform.position, pos.position + (pos.transform.forward * adjust) - (pos.transform.up * 0.4f), Time.deltaTime * grabPower); 
obj.transform.rotation = Quaternion.Lerp(obj.transform.rotation, pos.rotation, Time.deltaTime * 5f);
}
} 

IEnumerator PrepareToDrop(float power)
{
RaycastHit hits;
while(!drop)
{
if(Physics.Raycast(transform.position, transform.forward, out hits, 1.5f, layerMask.value)) 
drop = false;
else 
drop = true;
yield return null;
}

obj.transform.parent = null;
obj.isKinematic = false;
obj.GetComponent().enabled = true;
obj.velocity = transform.forward * power;
drop = grab = false;
}
}

Вот еще один, это пустое место помещается в контрольную точку объекта, чтобы сценарий понял, чтобы взять этот объект

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof (PhotonView))]
public class Pickable : Photon.MonoBehaviour {

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...