简介: 基本上我一直在使用 Unity Netcode。我设置了中继服务器。大厅系统。基本运动下降。现在我想生成一颗子弹,向玩家面对的方向射击。
问题: 实例化子弹后,设置其位置和旋转,并在网络管理器中生成它。子弹进行transform.forward不会朝着玩家面对的方向前进。它朝随机方向发展。有时甚至会走到玩家面对的地方。
这很烦人,令人困惑,而且伤害了我的大脑。
我尝试过的: 我尝试更改相机、枪和玩家对象的生成位置和旋转。没有一个起作用。我打印了旋转和位置:两者都与生成点/旋转相匹配。
子弹生成器的代码:
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();
}
}
项目符号代码:
public float speed;
void Update()
{
print(transform.forward);
if(NetworkManager.Singleton.IsServer)
{
transform.Translate(transform.forward * speed);
}
}
我通过在项目符号中添加前向向量 3 字段解决了这个问题。生成子弹时,我将前向矢量 3 设置为主摄像机的transform.forward。然后按前进向量3加速子弹向前。还是很奇怪,子弹的transform.forward有bug。