Unity3d unet - 源自客户端的TargetRPC调用

时间:2016-12-31 05:34:25

标签: c# multiplayer unet

我们都知道,Unet的文档很缺乏。

我很想得到这个答案,希望它可以帮助其他人稍后搜索。

以下是我要做的事情:

  1. 在玩家客户端上使用raycast检测点击。
  2. 使用[Command]
  3. 指示对专用服务器的命中
  4. 通知使用[TargetRPC]
  5. 命中的一个客户端

    问题是TargetRPC需要一个NetworkConnection值,但唯一记录的方法是使用该对象的ConnectToClient - 我没有,我需要得到。

    如何将我在客户端点击的播放器识别为可以转换为正确的NetworkConnection值的方式。

    在本地玩家权限对象上:

    $oSymbol = new symbolObj($map, "imtest");
    $oSymbol->set("type", MS_SYMBOL_PIXMAP);
    $oSymbol->setImagePath('symbols/images/star-symbol.png');
    $oSymbol->set("filled", MS_TRUE);
    $oSymbol->set("sizex", 1);
    $oSymbol->set("sizey", 1);
    $oSymbol->set("inmapfile", MS_TRUE);
    
    
    
    //$style->set("symbolname", "mydash");
    
    /*
     * @ create CLASS for LAYER
     */
    $class = new ClassObj($layer);
    
    if ($type_feature == 'polygon') {
        //die('polygon');
        $symbol = 'mapinfo-sym-41';
    
    
        $symbol_style_opacity = 100;
        $symbol_style_color = array(0, 0, 255);
        $class->updateFromString("
        CLASS
            STYLE
                SYMBOL 'imtest'
                COLOR 0 0 255
                ANGLE 30
                SIZE 10
                WIDTH 1
                OPACITY 100
            END
        END
    ");
    }
    

2 个答案:

答案 0 :(得分:2)

[Command]
void CmdIHitSomeone(int amountToHit, NetworkIdentity target) 
{
  TargetLetYourVictimFeelIt(target.connectionToClient , amountToHit);     
}
[TargetRPC]
void TargetLetYourVictimFeelIt(NetworkConnection target, int amount)
{
  //do something bad here
}
// call your command by getting NetworkIdentitiy component of your target/enemy
GameObject target; 
CmdIHitSomeone(10, target.GetComponent<NetworkIdentity>());

答案 1 :(得分:1)

NetworkConnection connnection = NetworkServer.objects[netId].connectionToClient;