Unity3d 为什么对象总是将自身定位为@0.0,而不是最初生成的

Unity3d 为什么对象总是将自身定位为@0.0,而不是最初生成的,unity3d,multiplayer,unity3d-unet,Unity3d,Multiplayer,Unity3d Unet,使用此代码生成: GameObject goX=Resources.Load(“苹果”)作为游戏对象; GameObject goY=Resources.Load(“橙色”)作为GameObject; GameObject goZ=Resources.Load(“香蕉”)作为GameObject GameObject go1 = GameObject.Instantiate (goX, Spawn3.transform.position, Quaternion.identity) as

使用此代码生成:

GameObject goX=Resources.Load(“苹果”)作为游戏对象; GameObject goY=Resources.Load(“橙色”)作为GameObject; GameObject goZ=Resources.Load(“香蕉”)作为GameObject

    GameObject go1 = GameObject.Instantiate (goX, Spawn3.transform.position, Quaternion.identity) as GameObject; 
    NetworkServer.Spawn (go1);
    GameObject go2 = GameObject.Instantiate (goY, Spawn4.transform.position, Quaternion.identity) as GameObject; 
    NetworkServer.Spawn (go2);
    GameObject go3 = GameObject.Instantiate (goZ, Spawn1.transform.position, Quaternion.identity) as GameObject; 
    NetworkServer.Spawn (go3);
Spawn1-Spawn4不是0.0

生成对象后,它将在正确的位置生成,但随后会立即移动到0.0位置

这是我在对象上使用的同步脚本,我认为问题出在脚本中,因为当我使用NetworkTransform组件时,它可以工作。但是,NetworkTransform遗漏了一些移动,因此我想在脚本中同步:

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

public class Object_SyncPosition : NetworkBehaviour {

private Transform myTransform;
[SerializeField] float lerpRate = 15;
[SyncVar] private Vector3 syncPos;

void Start () {
    myTransform = GetComponent<Transform> ();
}

void Update () {
    if (hasAuthority) {
        TransmitPosition ();
    }

    LerpPosition ();

}

void LerpPosition () {
    if (!isLocalPlayer) {
        myTransform.position = Vector3.Lerp (myTransform.position, syncPos, Time.deltaTime * lerpRate);
    }
}

[Command]
void Cmd_ProvidePositionToServer (Vector3 pos) {
    syncPos = pos;
}

[ClientCallback]
void TransmitPosition () {
    Cmd_ProvidePositionToServer (myTransform.position);
}

}
使用UnityEngine;
使用系统集合;
使用UnityEngine。联网;
公共类对象\u同步位置:NetworkBehavior{
私有变换;
[SerializeField]float lerpRate=15;
[SyncVar]专用向量3 syncPos;
无效开始(){
myTransform=GetComponent();
}
无效更新(){
如果(有权){
传输位置();
}
Lerposition();
}
无效条件(){
如果(!isLocalPlayer){
myTransform.position=Vector3.Lerp(myTransform.position,syncPos,Time.deltaTime*lerpRate);
}
}
[命令]
void Cmd_提供给服务器(Vector3位置){
syncPos=pos;
}
[客户端回调]
无效传输位置(){
Cmd_提供给服务器(myTransform.position);
}
}

我认为您的对象正在向syncPos移动(默认为0.0)。尝试将开始脚本中的syncPos transform设置为您的繁殖位置

void Start () {
    myTransform = GetComponent<Transform> (); 
    syncPos = GetComponent<Transform>().position;
}
void Start(){
myTransform=GetComponent();
syncPos=GetComponent().position;
}