子弹运动在 Unity NetCode 中不起作用

问题描述 投票:0回答:1

简介: 基本上我一直在使用 Unity Netcode。我设置了中继服务器。大厅系统。基本运动下降。现在我想生成一颗子弹,向玩家面对的方向射击。

问题: 实例化子弹后,设置其位置和旋转,并在网络管理器中生成它。子弹进行transform.forward不会朝着玩家面对的方向前进。它朝随机方向发展。有时甚至会走到玩家面对的地方。

这很烦人,令人困惑,而且伤害了我的大脑。

我尝试过的: 我尝试更改相机、枪和玩家对象的生成位置和旋转。没有一个起作用。我打印了旋转和位置:两者都与生成点/旋转相匹配。

我的继承体系的基本结构是这样的:Hierarchy

子弹生成器的代码:

    using UnityEngine;
    using Unity.Netcode;
    using Unity.Mathematics;
    public class Player_Shooting : NetworkBehaviour
    { 
        public GameObject bullet;
        public Transform gun;
        public Transform capsule;
    
        void Update()
        {
        if(GetComponentInParent<NetworkObject>().IsOwner)
        if(Input.GetMouseButtonUp(0))
            Shoot_Rpc();
        [Rpc(SendTo.Server)]
        public void Shoot_Rpc()
        {
            var instance =     Instantiate(bullet,capsule.transform.position,capsule.transform.rotation );
            var instanceNetworkObj = instance.GetComponent<NetworkObject>();
            instanceNetworkObj.Spawn();
        }   
    }

玩家检查员: Player Inspector

项目符号代码:

    public float speed;
    void Update()
    {
        print(transform.forward);
        if(NetworkManager.Singleton.IsServer)
        {
            transform.Translate(transform.forward * speed);
        }
    }

子弹检查员: Bullet Inspector

c# visual-studio unity-game-engine multiplayer
1个回答
0
投票

我通过在项目符号中添加前向向量 3 字段解决了这个问题。生成子弹时,我将前向矢量 3 设置为主摄像机的transform.forward。然后按前进向量3加速子弹向前。还是很奇怪,子弹的transform.forward有bug。

© www.soinside.com 2019 - 2024. All rights reserved.