Синтаксис:
Используется csharp
using UnityEngine;
public class Moving : MonoBehaviour {
public bool IsRunning = false;
public bool IsWDown = false;
public KeyCode RunKey = KeyCode.LeftShift;
public float speed = 6.0f;
public float backspeed = 3.0f;
public float strafespeed = 3.0f;
public float RunMultiplier = 1.5f;
public GameObject player;
public float rotatespeed;
void Start () {
player = this.gameObject;
}
void FixedUpdate () {
if (Input.GetKey(RunKey))
{
if (IsRunning == false)
{
IsRunning = true;
}
}
else
{
IsRunning = false;
}
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
{
if(IsRunning)
{
player.transform.position += player.transform.forward * RunMultiplier * speed;
IsWDown = true;
}
else
{
IsWDown = true;
player.transform.position += player.transform.forward * speed;
}
}
else
{
IsWDown = false;
}
if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
{
if(!IsWDown)
{
player.transform.position -= player.transform.forward * backspeed;
}
}
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
{
if (!IsWDown)
{
if (IsRunning)
{
player.transform.position -= player.transform.right * RunMultiplier * strafespeed;
}
else
{
player.transform.position -= player.transform.right * strafespeed;
}
}
else
{
if (IsRunning)
{
player.transform.position -= player.transform.right * (RunMultiplier - 1.5f) * strafespeed;
}
else
{
player.transform.position -= player.transform.right * (strafespeed - 0.025f);
}
}
}
else if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
{
if (!IsWDown)
{
if (IsRunning)
{
player.transform.position += player.transform.right * RunMultiplier * strafespeed;
}
else
{
player.transform.position += player.transform.right * strafespeed;
}
}
else
{
if (IsRunning)
{
player.transform.position += player.transform.right * (RunMultiplier - 1.5f) * strafespeed;
}
else
{
player.transform.position += player.transform.right * (strafespeed - 0.025f);
}
}
}
Plane playerPlane = new Plane(Vector3.up, transform.position);
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
float hitdist = 0.0f;
if (playerPlane.Raycast(ray, out hitdist))
{
Vector3 targetPoint = ray.GetPoint(hitdist);
Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotatespeed);
}
}
}
public class Moving : MonoBehaviour {
public bool IsRunning = false;
public bool IsWDown = false;
public KeyCode RunKey = KeyCode.LeftShift;
public float speed = 6.0f;
public float backspeed = 3.0f;
public float strafespeed = 3.0f;
public float RunMultiplier = 1.5f;
public GameObject player;
public float rotatespeed;
void Start () {
player = this.gameObject;
}
void FixedUpdate () {
if (Input.GetKey(RunKey))
{
if (IsRunning == false)
{
IsRunning = true;
}
}
else
{
IsRunning = false;
}
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
{
if(IsRunning)
{
player.transform.position += player.transform.forward * RunMultiplier * speed;
IsWDown = true;
}
else
{
IsWDown = true;
player.transform.position += player.transform.forward * speed;
}
}
else
{
IsWDown = false;
}
if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
{
if(!IsWDown)
{
player.transform.position -= player.transform.forward * backspeed;
}
}
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
{
if (!IsWDown)
{
if (IsRunning)
{
player.transform.position -= player.transform.right * RunMultiplier * strafespeed;
}
else
{
player.transform.position -= player.transform.right * strafespeed;
}
}
else
{
if (IsRunning)
{
player.transform.position -= player.transform.right * (RunMultiplier - 1.5f) * strafespeed;
}
else
{
player.transform.position -= player.transform.right * (strafespeed - 0.025f);
}
}
}
else if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
{
if (!IsWDown)
{
if (IsRunning)
{
player.transform.position += player.transform.right * RunMultiplier * strafespeed;
}
else
{
player.transform.position += player.transform.right * strafespeed;
}
}
else
{
if (IsRunning)
{
player.transform.position += player.transform.right * (RunMultiplier - 1.5f) * strafespeed;
}
else
{
player.transform.position += player.transform.right * (strafespeed - 0.025f);
}
}
}
Plane playerPlane = new Plane(Vector3.up, transform.position);
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
float hitdist = 0.0f;
if (playerPlane.Raycast(ray, out hitdist))
{
Vector3 targetPoint = ray.GetPoint(hitdist);
Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotatespeed);
}
}
}
Но что бы я не делал, как бы не пытался перенести это для каждого игрока, у меня не получалось. То за мышкой поворачиваются все игроки, то идут все в одну сторону. Мб кто объяснит или даже покажет на каком то хорошем примере? Буду очень благодарен. Просто для моей задумки очень нужен нетворкинг, я разобрался уже во всех этих сунквар переменных, но в перемещении не очень.