今天我又又又来发Mirror啦,有需要更多代码的可以找我,文章如果有错,欢迎大佬改正。
常用代码
1.第一人称角色移动代码:
这个其实很简单,在原来移动的基础上加上if (!isLocalPlayer) return;就行了,然后再绑定一下摄像机
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mirror;
public class Playercode : NetworkBehaviour {
public float speed = 5f;
//cam
public Camera cam;
// Use this for initialization
public override void OnStartLocalPlayer()
{
base.OnStartLocalPlayer();;
//Cursor.visible = false;
//Cursor.lockState = CursorLockMode.Locked;
cam.gameObject.SetActive(true);
}
private void FixedUpdate()
{
if (!isLocalPlayer) return;
Move();
MouseLook();
}
// Update is called once per frame
void Update () {
if (!isLocalPlayer) return;
if (Input.GetKeyDown(KeyCode.Space))//跳跃
{
Ray ray = new Ray(transform.position, Vector3.down);
if (Physics.Raycast(ray,1.5f))
{
GetComponent<Rigidbody>().velocity = Vector3.up * 8;
}
}
}
void Move(){//移动
float x = Input.GetAxis ("Horizontal");
float z = Input.GetAxis ("Vertical");
Vector3 fwd = transform.forward;
Vector3 f = new Vector3 (fwd.x, 0, fwd.z).normalized;
Vector3 r = transform.right;
Vector3 move = f * z + r * x;
transform.position += move * speed * Time.deltaTime;
}
void MouseLook(){//鼠标控制视角
float mx = Input.GetAxis ("Mouse X");
float my = Input.GetAxis ("Mouse Y");
Quaternion qx = Quaternion.Euler (0, mx*2, 0);
Quaternion qy = Quaternion.Euler (-my*2, 0, 0);
transform.rotation = qx * transform.rotation;
cam.transform.rotation = cam.transform.rotation * qy;
float angle = transform.eulerAngles.x;
if (angle > 180) {
angle -= 360;
}
if (angle < -180) {
angle += 360;
}
if (angle > 80) {
transform.eulerAngles = new Vector3 (80, transform.eulerAngles.y, 0);
}
if (angle < -80) {
transform.eulerAngles = new Vector3 (-80, transform.eulerAngles.y, 0);
}
}
2.连接后随机设置玩家颜色并同步
这个也很容易实现,只要使用syncVar同步一下颜色就好。
[SyncVar(hook = "SetColor")]
Color PlayerColor;
public SkinnedMeshRenderer playermesh;
public override void OnStartServer()
{
base.OnStartServer();
float r = Random.Range(0f, 1f);
float g = Random.Range(0f, 1f);
float b = Random.Range(0f, 1f);
PlayerColor = new Color(r,g,b);
}
void SetColor(Color _,Color newColor)
{
playermesh.material.color = newColor;//或者this.GetComponent<Renderer>().material.color = PlayerColor;
}
3.第三、第一人称视角切换:
这个我们只需要定义一个主摄像机cam,第一人称摄像机cam2,第三人称摄像机cam3,然后来回切换就行了。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mirror;
public class Playercode : NetworkBehaviour {
public float speed = 5f;
private bool change = true;
//cam
public Camera cam;
public Camera cam2;
public Camera cam3;
// Use this for initialization
public override void OnStartLocalPlayer()
{
base.OnStartLocalPlayer();;
//Cursor.visible = false;
//Cursor.lockState = CursorLockMode.Locked;隐藏鼠标
cam2.gameObject.SetActive(false);
cam3.gameObject.SetActive(false);
cam = cam2;
cam.gameObject.SetActive(true);
}
// Update is called once per frame
void Update () {
if (!isLocalPlayer) return;
if(Input.GetKeyDown(KeyCode.V))//切换摄像机
{
if (change)
{
cam = cam3;
change = false;
cam.gameObject.SetActive(true);
cam2.gameObject.SetActive(false);
}
else if(!change)
{
cam = cam2;
change = true;
cam.gameObject.SetActive(true);
cam3.gameObject.SetActive(false);
}
}
}
等等,不对,我听到上楼的声音了,我爸来了!!
好吧这只是一个网图。
今天就写到这里吧。
最后给大家一个投票,大家是更喜欢unity呢还是c++呢?