一、前言
经过粗略地分工,在FPS游戏多人化的部分,由我来完成pun控制输入同步和remote开枪效果同步。
二、pun控制输入同步
首先要对游戏角色的物体进行一些组件和脚本的装载。
对于脚本FPCharacterControllerMovement4,它实现了人物移动的网络同步。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Serialization;
public class FPCharacterControllerMovement4 : MonoBehaviour
{
private CharacterController characterController;
[SerializeField] private Animator characterAnimator;
[SerializeField] private Animator tp_CharacterAnimator;
private Vector3 movementDirection;
private Transform characterTransform;
private float velocity;
private bool isCrouched;
private float originHeight;
public float SprintingSpeed;
public float WalkSpeed;
public float SprintingSpeedWhenCrouched;
public float WalkSpeedWhenCrouched;
public float Gravity = 9.8f;
public float JumpHeight;
public float CrouchHeight = 1f;
public float CurrentSpeed {
get; private set; }
private IEnumerator crouchCoroutine;
private void Start()
{
characterController = GetComponent<CharacterController>();
// characterAnimator = GetComponentInChildren<Animator>();
characterTransform = transform;
originHeight = characterController.height;
}
private void Update()
{
CurrentSpeed = WalkSpeed;
if (characterController.isGrounded)
{
var tmp_Horizontal = Input.GetAxis("Horizontal");
var tmp_Vertical = Input.GetAxis("Vertical");
movementDirection =
characterTransform.TransformDirection(new Vector3(tmp_Horizontal, 0, tmp_Vertical)).normalized;
if (isCrouched)
{
CurrentSpeed = Input.GetKey(KeyCode.LeftShift) ? SprintingSpeedWhenCrouched : WalkSpeedWhenCrouched;
}
else
{
CurrentSpeed = Input.GetKey(KeyCode.LeftShift) ? SprintingSpeed : WalkSpeed;
}
if (Input.GetButtonDown("Jump"))
{
movementDirection.y = JumpHeight;
}
if (Input.GetKeyDown(KeyCode.C))
{
var tmp_CurrentHeight = isCrouched ? originHeight : CrouchHeight;
if (crouchCoroutine != null)
{
StopCoroutine(crouchCoroutine);
crouchCoroutine