最近开始使用Unity Netcode (MLAPI)来尝试制作一款多人赛车游戏,但我遇到了一些麻烦。这是我第一次制作多人游戏,所以我对这个东西相当陌生。
发生了什么:客户端完全正常地连接到主机,轮子像汽车一样移动,但客户端根本无法移动。主机可以很好地移动,并且能够与客户端发生冲突,并且客户端可以查看所有内容,但是客户端就是不移动。我假设这与NetworkTransforms有关,但我真的不确定这一点。
下面是我附加的车辆移动脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Netcode;
public class VehicleMovement : NetworkBehaviour
{
private const string HORIZONTAL = "Horizontal";
private const string VERTICAL = "Vertical";
private float horizontalInput;
private float verticalInput;
private float currentSteerAngle;
private bool isBraking;
private float currentBrakeForce;
[SerializeField] private float motorForce;
[SerializeField] private float brakeForce;
[SerializeField] private float maxSteeringAngle;
[SerializeField] private WheelCollider frontLeftWheelCollider;
[SerializeField] private WheelCollider frontRightWheelCollider;
[SerializeField] private WheelCollider rearLeftWheelCollider;
[SerializeField] private WheelCollider rearRightWheelCollider;
[SerializeField] private Transform frontLeftWheelTransform;
[SerializeField] private Transform frontRightWheelTransform;
[SerializeField] private Transform rearLeftWheelTransform;
[SerializeField] private Transform rearRightWheelTransform;
private void FixedUpdate()
{
if (IsLocalPlayer)
{
GetInput();
HandleMotor();
HandleSteering();
UpdateWheels();
}
}
private void HandleMotor()
{
frontLeftWheelCollider.motorTorque = verticalInput * motorForce;
frontRightWheelCollider.motorTorque = verticalInput * motorForce;
currentBrakeForce = isBraking ? brakeForce : 0f;
ApplyBraking();
}
private void ApplyBraking()
{
frontRightWheelCollider.brakeTorque = currentBrakeForce;
frontLeftWheelCollider.brakeTorque = currentBrakeForce;
rearRightWheelCollider.brakeTorque = currentBrakeForce;
rearLeftWheelCollider.brakeTorque = currentBrakeForce;
}
private void HandleSteering()
{
currentSteerAngle = maxSteeringAngle * horizontalInput;
frontLeftWheelCollider.steerAngle = currentSteerAngle;
frontRightWheelCollider.steerAngle = currentSteerAngle;
}
private void GetInput()
{
horizontalInput = Input.GetAxis(HORIZONTAL);
verticalInput = Input.GetAxis(VERTICAL);
isBraking = Input.GetKey(KeyCode.Space);
}
private void UpdateWheels()
{
UpdateSingleWheel(frontLeftWheelCollider, frontLeftWheelTransform);
UpdateSingleWheel(frontRightWheelCollider, frontRightWheelTransform);
UpdateSingleWheel(rearLeftWheelCollider, rearLeftWheelTransform);
UpdateSingleWheel(rearRightWheelCollider, rearRightWheelTransform);
}
private void UpdateSingleWheel(WheelCollider wheelCollider, Transform wheelTransform)
{
Vector3 pos;
Quaternion rot;
wheelCollider.GetWorldPose(out pos, out rot);
wheelTransform.rotation = rot;
wheelTransform.position = pos;
}
}我的前置由Transform、Rigidbody、上面的脚本、NetworkObject、NetworkTransform和NetworkRigidbody组成。
Here是一个未列出的YouTube视频,希望能直观地显示该问题。
任何和所有的帮助都将不胜感激!谢谢!
发布于 2021-11-10 00:17:46
在包管理器下,在"Samples“下隐藏的"Netcode for GameObjects”中有一个可选的导入,称为"ClientNetwork Transform“。
这完全解决了问题。
https://stackoverflow.com/questions/69903567
复制相似问题