求一种第一人称射击单机游戏类的游戏,含数据包的,非站桩,非联网的,求介绍

枪的荣耀:无政府状态安卓版免费下载|枪的荣耀:无政府状态(世界联网) v1.2含数据包_5577我机网
您的位置: →
→ 枪的荣耀:无政府状态(世界联网) v1.2含数据包
《枪的荣耀:无政府状态 Gun glory: Anarchy》为你带来一场全新的指尖射击之旅,这里汇聚了来自全世界的射击爱好者,和他们同台竞技,谁才是真正的射击达人呢?!【数据包说明】数据包下载:数据包大小:302.9M数据包位置:数据包为游戏或APP的重要组成部分,有的在安装主程序APK之后可以联网WiFi下载,有的下载困难,所以建议PC下载数据包按位置安装,安装位置:Android\obb【玩法攻略】左下角的摇杆控制你的角色移动;右下角的快捷键分别对应的是射击、更换武器、更换弹夹;合理的使用武器将所有出现在你眼前的敌人消灭殆尽;获得的金币可以用来强化自身,购买更强大的武器!【游戏特色】1、独创移动射击玩法,等你来战;2、全世界联网,用你手中的武器书写属于你的枪神传奇;3、易于上手的游戏操作,流畅的操作体验;4、紧张刺激的游戏环节,你能够胜任吗?!
第一人称手游
高画质手游
共有:632款
第一人称手游一直深受广大小伙伴的青睐,火爆的战斗场景,让你在这里即可感受到一场惊心动魄的冒险体验,第一人称手机网游等你来享,你值得拥有!
全民枪王是一款由腾讯最新代理的3D枪战射击游戏!第一人称为视角!游戏中加入了丰富的装备和武器可以选择,多样化的游戏关卡可以挑战,游戏中你将操控自己的角色,以手中的各种武器来进行枪战射击、竞技比赛等等,享受2015全新3D射击!
《抢滩登陆3D》为你带来一场极致的FPS射击之旅,游戏在延续传统FPS游戏的基础上,采用真实的画风设计,为你带来一场更为逼真的指尖塔防盛宴,赶快加入进来下载体验吧!
午夜之星Midnight Star是由光晕Halo的制作团队打造的一款科幻FPS射击游戏,游戏可单机可联网,另外游戏的一大亮点在与不需要使用虚拟按键直接点击屏幕就能完成射击,相信这款游戏能给你带来完全不同的射击快感。
《全民生化》为你带来最火爆的反恐体验,游戏采用FPS射击玩法,全3D视角设计,为你带来更为逼真的射击体验!多重特色模式等你来战,为你带来一场前所未有的指尖射击盛宴!
穿越火线枪战王者手雷大乱斗破解版给各位奉上,让大家无限轰炸,该版本破解vip特权,让大家不花钱也可以享受特权,感兴趣的朋友赶快前来下载吧!
诛仙手游是一款全新的修真题材RPG手游!游戏根据最经典小说“诛仙”改编而成,延续了经典小说的剧情背景和人物角色系统,完美世界精心打造,同时完美移植PC端游内容,唯美的仙侠手游等你来体验!喜欢诛仙的玩家不可错过!
共有:4635款
高画质手游分享,标签内的游戏都是手机网游中画质以及画面比较好的游戏,对于游戏画面有要求的亲们不妨下载这些游戏体验一下,高画质的手游会随时分享给大家,可以关注本合集噢!
问道手游在各位道友们的期待下终于发布上线了,这款经典的端游一直都非常的火,问道手游版的上线,将会给玩家带来全新的玩法及体验,赶快来我机网下载问道手游官方版吧。
《星际英雄手游》是一款科幻题材的策略手游,游戏加入了丰富的养成元素,多种趣味玩法为你引爆新一轮的指尖策略盛宴,赶快加入进来下载体验吧!
风云修真,这是动作系列的手游,这里有众多场景,高清的游戏画质,带来畅爽的游戏体验哦,还在等什么,还不赶紧来下载么。
《暗黑黎明2破解版》为你带来一场全新的暗黑RPG之旅,此版本已破解内购,无限钻石供你使用!火爆的战斗场景,流畅的操作体验,酷炫的动作盛宴等你来享!
《仙迹》在打怪升级之余,可以去游山玩水,也可以与他人一较高下,闲暇之余不再寂寞,今天小编为大家带来的这款游戏绝对会让你心动,点击下载,一起加入这个美妙的仙侠世界吧。
修真的世界永远是充满挑战的,只有一步一步渡过难关,才能成长,才能更强,但是修真的道路并不孤独,赶快加入《仙迹》与大家一起来修仙吧。
相关合集推荐
本类下载排行Unity3D教学 开发简单版第一人称射击游戏 可以多人联机(附源码) - CSDN博客
Unity3D教学 开发简单版第一人称射击游戏 可以多人联机(附源码)
这一篇文章主要是和大家分享如何制作一个属于自己的“第一人称射击游戏”,而且是要可以多人联机的。这个游戏属于比简单的,大神可以直接无视,如果有做错的地方请大家多多指点,我也是刚学如何做游戏。代码是用C#编写,主要实现的功能有三个:第一人称移动控制、角色控制(如射击)、TCP服务端和客户端。我将项目命名为FPS。
游戏运作流程:
1. 创建服务端
2. 从各个客户端接收数据,然后广播给所有客户
1. 连接至服务端
2. 从服务端接收到其他客户的数据(比如当前位置,是否有开枪等等),然后更新到游戏上
3. 发送自己当前在游戏的状态给服务端
联机效果图:
完整源代码与已编译好的游戏程序:
C#脚本简介:
1. FirstPersonControl.cs
这个脚本是用来做第一人称控制的
using System.C
using System.Collections.G
using UnityE
public class FirstPersonControl : MonoBehaviour {
// Use this for initialization
void Start () {
// 获取摄像头对象
mCamera = transform.Find(&Main Camera&);
// 获取右手对象
mRightHand = transform.Find(&RightHand&);
// 获取脚步声播放组建
mAudio = transform.GetComponent&AudioSource&();
// Update is called once per frame
void Update() {
if (UpdateMovement()) {
PlayStepSound();
StopPlayStepSound();
UpdateLookAt();
// 第一人称控制器的常量与变量
private Transform mC
private Transform mRightH
private AudioSource mA
public float mMoveSpeed = 8;
// 物体移动速度
public float mMouseSensitivity = 5;
// 鼠标旋转的敏感度
public float mMinimumX = 325;
// 向下望的最大角度
public float mMaximumX = 45;
// 向上望的最大角度
public float mMinimumY = -360;
// 向左望的最大角度
public float mMaximumY = 360;
// 向右望的最大角度
private Vector3 _curRotation = new Vector3(0,0,0);
// 当前旋转角度
// 更新移动位置
private bool UpdateMovement() {
float distance = mMoveSpeed * Time.deltaT
// 移动距离
if (Input.GetKey(KeyCode.W)) {
float x = Mathf.Sin(transform.eulerAngles.y * Mathf.Deg2Rad) *
float z = Mathf.Cos(transform.eulerAngles.y * Mathf.Deg2Rad) *
transform.Translate(new Vector3(x,0,z), Space.World);
if (Input.GetKey(KeyCode.S)) {
float x = Mathf.Sin(transform.eulerAngles.y * Mathf.Deg2Rad) *
float z = Mathf.Cos(transform.eulerAngles.y * Mathf.Deg2Rad) *
transform.Translate(new Vector3(-x, 0, -z), Space.World);
if (Input.GetKey(KeyCode.A)) {
transform.Translate(new Vector3(-distance, 0, 0));
if (Input.GetKey(KeyCode.D)) {
transform.Translate(new Vector3(distance, 0, 0));
// 更新摄像头指向位置
private void UpdateLookAt() {
// 左右旋转
_curRotation.y = _curRotation.y + Input.GetAxis(&Mouse X&) * mMouseS
_curRotation.y = Mathf.Clamp(_curRotation.y, mMinimumY, mMaximumY);
// 设置身体
Vector3 rotation = transform.eulerA
rotation.y = _curRotation.y;
transform.eulerAngles =
// 上下旋转
_curRotation.x = _curRotation.x
- Input.GetAxis(&Mouse Y&) * mMouseS
_curRotation.x = Mathf.Clamp(_curRotation.x, mMinimumX, mMaximumX);
// 设置摄像头
mCamera.localEulerAngles = new Vector3(_curRotation.x, 0, 0);
// 设置右手
rotation = mRightHand.eulerA
rotation.x = _curRotation.x;
mRightHand.eulerAngles =
// 播放脚步声
private void PlayStepSound() {
if (!mAudio.isPlaying) {
mAudio.Play();
// 停止播放声音
private void StopPlayStepSound() {
if (mAudio.isPlaying) {
mAudio.Stop();
2. Character.cs
角色控制脚本,主要是用来控制开枪等角色动作
using System.C
using System.Collections.G
using UnityE
public class Character : MonoBehaviour {
// Use this for initialization
void Start() {
// 获取摄像头对象
mCamera = transform.Find(&Main Camera&);
// 获取右手对象
mRightHand = transform.Find(&RightHand&);
// 获取枪声播放组件
mGunAudio = transform.Find(&RightHand/Pistol&).GetComponent&AudioSource&();
// 获取火花效果
mFireEffect = transform.Find(&RightHand/Pistol/FireEffect&).GetComponent&ParticleSystem&();
// 获取网络组件
mNetwork = transform.GetComponent&Network&();
// Update is called once per frame
void Update() {
UpdateFire();
// 发送当前状态到服务端,然后服务端就会转发给其他客户
mNetwork.SendStatus(transform.position, transform.eulerAngles,
mCamera.eulerAngles, mRightHand.eulerAngles, _isShooted, _hp);
// 处理服务器发过来的数据包,数据包里装着其他客户的信息
ProcessPackage();
private Transform mC
private Transform mRightH
private AudioSource mGunA
public GameObject mP
// 开枪后撞击产生的碎片
private ParticleSystem mFireE
// 开枪后的火花
private bool _isS
// 判断是否开了枪
private Network mN
// 网络组件
public GameObject mEnemyC
// 其他客户的实例
private Hashtable _htEnemies = new Hashtable();
// 其他客户的控制脚本
private void UpdateFire() {
if (Input.GetButtonUp(&Fire1&)) {
// 射击音效与画面
PlayShotSound();
// 播放火花效果
PlayFireEffect();
// 判断射击位置
if (Physics.Raycast(mCamera.position, mCamera.forward, out hit, 100)) {
// 被枪击中的地方会有碎片弹出
DrawPieces(hit);
// 设置开枪判断
_isShooted =
// 设置开枪判断
_isShooted =
// 播放枪声
private void PlayShotSound() {
mGunAudio.PlayOneShot(mGunAudio.clip);
private void DrawPieces(RaycastHit hit) {
for (int i = 0; i & 5; ++i) {
GameObject p = Transform.Instantiate(mPiece);
// 碎片撞击到物体后的反弹位置
Vector3 fwd = mCamera.forward * -1;
p.transform.position = hit.
p.GetComponent&Rigidbody&().AddForce(fwd * 100);
// 0.3秒后删除
Destroy(p, 0.3f);
// 播放火花效果
private void PlayFireEffect() {
mFireEffect.Play();
// 人物变量
private int _hp = 100;
// 受到伤害
public void GetHurt() {
_hp -= 10;
if (_hp &= 0) {
private void Revive() {
_hp = 100;
transform.position = new Vector3(0,1,0);
// 处理数据包
private void ProcessPackage() {
// 获取数据包直到完毕
while (mNetwork.NextPackage(out p)) {
// 确定不是本机,避免重复
if (mNetwork._id == p.id) {
// 获取该客户相对应的人物模组
if (!_htEnemies.Contains(p.id)) {
AddEnemyCharacter(p.id);
// 更新客户的人物模型状态
EnemyCharacter ec = (EnemyCharacter)_htEnemies[p.id];
ec.SetHP(p.hp);
// 移动动作
ec.Move(p.pos.V3, p.rot.V3, p.cameraRot.V3, p.rightHandRot.V3);
if (p.isShooted) {
ec.Fire();
// 增加客户的人物模组
private EnemyCharacter AddEnemyCharacter(int id) {
GameObject p = GameObject.Instantiate(mEnemyCharacter);
EnemyCharacter ec = p.GetComponent&EnemyCharacter&();
ec.SetID(id);
// 加入到哈希表
_htEnemies.Add(id, ec);
// 删除客户的人物模组
private void RemoveEnemyCharacter(int id) {
EnemyCharacter ec = (EnemyCharacter)_htEnemies[id];
ec.Destroy();
_htEnemies.Remove(id);
// 删除所有客户的人物模组
public void RemoveAllEnemyCharacter() {
foreach (int id in _htEnemies.Keys) {
EnemyCharacter ec = (EnemyCharacter)_htEnemies[id];
ec.Destroy();
_htEnemies.Clear();
3.Network.cs
网络组件,用来创建服务端或客户端。服务端负责广播从各个客户端接收的数据给所有客户。客户端则是接收从服务端接收其他客户的数据。
using System.C
using System.Collections.G
using UnityE
using System.IO;
using System.Runtime.Serialization.Formatters.B
using System.N
using System.Net.S
public class Network : MonoBehaviour {
// Use this for initialization
void Start () {
// 获取人物组件
mCharacter = transform.GetComponent&Character&();
// 数据包大小
_packageSize = PackageSize();
// Update is called once per frame
void Update () {
// 网络设置UI
void OnGUI() {
GUI.Box (new Rect(0,0,800,60),&网络设置&);
if (_connected) {
GUI.Label (new Rect(10,25,100,25), _isServer ? &已建立服务端&:&已连接服务端&);
} else if (!_connected) {
GUI.Label (new Rect(10,25,100,25), &未连接&);
GUI.Label (new Rect(130,25,20,25), &IP:&);
GUI.Label (new Rect(270,25,40,25), &端口:&);
GUI.Label (new Rect(380,25,40,25), &ID:&);
if (!_connected && !_isServer) {
_ip = GUI.TextField (new Rect (150, 25, 100, 25), _ip, 100);
_port = System.Convert.ToInt32 (GUI.TextField (new Rect (310, 25, 50, 25), _port.ToString (), 100));
_id = System.Convert.ToInt32 (GUI.TextField (new Rect (420, 25, 100, 25), _id.ToString(), 100));
GUI.TextField (new Rect (150, 25, 100, 25), _ip, 100);
GUI.TextField (new Rect (310, 25, 50, 25), _port.ToString (), 100);
GUI.TextField (new Rect (420, 25, 100, 25), _id.ToString(), 100);
if (!_connected && !_isServer) {
if (GUI.Button(new Rect(540,25,100,25), &开启服务端&)) {
StartServer();
ConnectServer();
if (GUI.Button(new Rect(660,25,100,25), &连接至服务端&)) {
ConnectServer();
if (_isServer) {
if (GUI.Button(new Rect(540,25,100,25), &关闭服务端&)) {
StopServer();
} else if (_connected) {
if (GUI.Button(new Rect(540,25,100,25), &取消连接&)) {
DisconnectServer();
// 服务端和客户端的共有变量
private Character mC // 人物组件
private bool _connected=
// 判断是否已经建立连接或开启服务端
private bool _isServer=
// 判断本程序建立的是服务端还是客户端
private string _ip = &127.0.0.1&;
private int _port = 18000;
public int _id = 1 ;
List&Package& _packages=new List&Package&();
private int _packageS
// 数据包大小
[Serializable]
public struct Package {
public Vector3S
// 人物位置
public Vector3S
// 人物旋转角度
public Vector3Serializer cameraR
// 摄像头旋转角度
public Vector3Serializer rightHandR
// 右手旋转角度
public bool isS
// 判断是否有开枪
// 获取包大小
private int PackageSize() {
Package p = new Package();
Serialize(p, out b);
return b.L
// 可序列化的Vector3
[Serializable]
public struct Vector3Serializer {
public void Fill(Vector3 v3) {
public Vector3 V3
{ get { return new Vector3(x, y, z); } }
// 序列化数据包
public bool Serialize(object obj, out byte[] result) {
bool ret =
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, obj);
result = ms.ToArray();
} catch (Exception e) {
Debug.Log(e.Message);
// 反序列化数据包
public bool Deserialize(byte[] data,out object result) {
bool ret =
result = new object();
MemoryStream ms = new MemoryStream(data);
BinaryFormatter bf = new BinaryFormatter();
result = bf.Deserialize(ms);
} catch (Exception e) {
Debug.Log(e.Message);
// 服务端变量
TcpListener _
// 储存已连接客户的结构体
private struct Client {
public TcpC
public byte[]
// 接收缓冲区
public List&byte& pendingD
// 还未处理的数据
// 客户列表
List&Client& _clients = new List&Client&();
// 开启服务端
private void StartServer() {
_listener = new TcpListener(IPAddress.Any, _port);
_listener.Start();
_listener.BeginAcceptSocket(HandleAccepted, _listener);
_isServer =
} catch (Exception e) {
Debug.Log(e.Message);
// 停止停止服务端
private void StopServer() {
_listener.Stop();
// 清空客户列表
lock (_clients) {
foreach (Client c in _clients) {
RemoveClient(c);
_clients.Clear();
// 清空数据包
lock (_packages) {
_packages.Clear();
_isServer =
} catch (Exception e) {
Debug.Log(e.Message);
// 处理客户端连接的回调函数
private void HandleAccepted(IAsyncResult iar) {
if (_isServer) {
TcpClient tcpClient = _listener.EndAcceptTcpClient(iar);
Client client = new Client();
client.client = tcpC
client.buffer = new byte[tcpClient.ReceiveBufferSize];
client.pendingData = new List&byte&();
// 把客户加入到客户列表
lock (_clients) {
AddClient(client);
// 开始异步接收从客户端收到的数据
tcpClient.GetStream().BeginRead(
client.buffer,
client.buffer.Length,
HandleClientDataReceived,
// 开始异步接收连接
_listener.BeginAcceptSocket(HandleAccepted, _listener);
// 从客户端接收数据的回调函数
private void HandleClientDataReceived(IAsyncResult iar) {
if (_isServer) {
Client client = (Client)iar.AsyncS
NetworkStream ns = client.client.GetStream();
int bytesRead = ns.EndRead(iar);
// 连接中断
if (bytesRead == 0) {
lock (_clients) {
_clients.Remove(client);
// 保存数据
for (int i=0; i&bytesR ++i) {
client.pendingData.Add(client.buffer[i]);
// 把数据解析成包
while (client.pendingData.Count &= _packageSize) {
byte[] bp = client.pendingData.GetRange(0, _packageSize).ToArray();
client.pendingData.RemoveRange(0, _packageSize);
// 把数据包分发给所有客户
lock(_clients) {
foreach (Client c in _clients) {
c.client.GetStream().Write(bp, 0, _packageSize);
c.client.GetStream().Flush();
// 开始异步接收从客户端收到的数据
client.client.GetStream().BeginRead(
client.buffer,
client.buffer.Length,
HandleClientDataReceived,
} catch (Exception e) {
Debug.Log(e.Message);
// 加入客户
private void AddClient(Client c) {
_clients.Add(c);
// 删除客户
private void RemoveClient(Client c) {
c.client.Client.Disconnect(false);
// 客户端变量
// 连接至服务端
private void ConnectServer() {
TcpClient tcpServer = new TcpClient();
tcpServer.Connect(_ip, _port);
_server = new Client();
_server.client = tcpS
_server.buffer = new byte[tcpServer.ReceiveBufferSize];
_server.pendingData = new List&byte&();
// 异步接收服务端数据
tcpServer.GetStream().BeginRead(
_server.buffer,
tcpServer.ReceiveBufferSize,
HandleServerDataReceived,
_connected =
} catch (Exception e) {
Debug.Log(e.Message);
// 从服务端断开
private void DisconnectServer() {
lock (_server.client) {
_server.client.Client.Close();
// 清空数据包
lock (_packages) {
_packages.Clear();
// 删除所有客户人物模型
mCharacter.RemoveAllEnemyCharacter();
_connected =
} catch (Exception e) {
Debug.Log(e.Message);
// 从服务端读取数据的回调函数
private void HandleServerDataReceived(IAsyncResult iar) {
if (_connected) {
Client server = (Client)iar.AsyncS
NetworkStream ns = server.client.GetStream();
int bytesRead = ns.EndRead(iar);
// 连接中断
if (bytesRead == 0) {
DisconnectServer();
// 保存数据
for (int i=0; i&bytesR ++i) {
server.pendingData.Add(server.buffer[i]);
// 把数据解析成包
while (server.pendingData.Count &= _packageSize) {
byte[] bp = server.pendingData.GetRange(0, _packageSize).ToArray();
server.pendingData.RemoveRange(0,_packageSize);
// 把数据转换成包然后再储存包列表
Deserialize(bp, out obj);
lock (_packages) {
_packages.Add((Package)obj);
// 异步接收服务端数据
server.client.GetStream().BeginRead(
server.buffer,
server.client.ReceiveBufferSize,
HandleServerDataReceived,
// 发送自己的当前的状态包给服务端
public void SendStatus(Vector3 pos, Vector3 rot,Vector3 cameraRot,
Vector3 rightHandRot, bool isShooted, int hp) {
if (_connected) {
Package p = new Package();
p.pos.Fill(pos);
p.rot.Fill(rot);
p.cameraRot.Fill(cameraRot);
p.rightHandRot.Fill(rightHandRot);
p.isShooted = isS
// 发送包到服务端
Serialize(p, out bp);
lock (_server.client) {
_server.client.GetStream().Write(bp, 0, _packageSize);
_server.client.GetStream().Flush();
} catch (Exception e) {
Debug.Log(e.Message);
// 断开服务端
DisconnectServer();
public bool NextPackage(out Package p) {
lock (_packages) {
if (_packages.Count == 0) {
p = new Package();
p = _packages[0];
_packages.RemoveAt(0);
4.EnemyCharacter.cs
这个脚本负责控制其他客户的行为,比如从服务端接收到其他客户移动或开枪的数据,就要用这个脚本来更新其他客户的当前行为
using System.C
using System.Collections.G
using UnityE
public class EnemyCharacter : MonoBehaviour {
// Use this for initialization
void Start () {
// 获取本机玩家的对象
mCharacter = GameObject.Find(&Character&).
mCharacterComponent = mCharacter.GetComponent&Character&();
// 获取摄像头对象
mCamera = transform.Find(&Camera&);
// 获取右手对象
mRightHand = transform.Find(&RightHand&);
// 获取枪声播放组件
mGunAudio = transform.Find(&RightHand/Pistol&).GetComponent&AudioSource&();
// 获取火花效果
mFireEffect = transform.Find(&RightHand/Pistol/FireEffect&).GetComponent&ParticleSystem&();
// 获取脚步声播放组件
mAudio = transform.GetComponent&AudioSource&();
// 显示血量和ID的组件
txID = transform.Find (&ID&);
txIDText = transform.Find (&ID&).GetComponent&TextMesh& ();
txHP = transform.Find (&HP&);
txHPText = transform.Find (&HP&).GetComponent&TextMesh& ();
// Update is called once per frame
void Update () {
// 摧毁对象
if (isDestroy) {
Destroy(gameObject);
// 更新对象属性
UpdataProperties();
private Transform mC
private Character mCharacterC
private Transform mC
private Transform mRightH
private AudioSource mGunA
private AudioSource mA
private ParticleSystem mFireE
// 开枪后的火花
public GameObject mP
// 开枪后撞击产生的碎片
private bool isDestroy =
// 销毁角色
public void Destroy() {
isDestroy =
// 角色移动动作
public void Move(Vector3 pos, Vector3 rot, Vector3 cameraRot, Vector3 rightHandRot) {
if (pos != transform.position) {
transform.position =
PlayStepSound();
StopPlayStepSound();
mCamera.eulerAngles = cameraR
transform.eulerAngles =
mRightHand.eulerAngles = rightHandR
// 播放脚步声
private void PlayStepSound() {
if (!mAudio.isPlaying) {
mAudio.Play();
// 停止播放声音
private void StopPlayStepSound() {
if (mAudio.isPlaying) {
mAudio.Stop();
public void Fire() {
// 射击音效与画面
PlayShotSound();
// 播放火花效果
PlayFireEffect();
// 判断射击位置
if (Physics.Raycast(mCamera.position, mCamera.forward, out hit, 100)) {
// 被枪击中的地方会有碎片弹出
DrawPieces(hit);
// 判断本机玩家是否中枪如果是就减
print(hit.collider.name);
if (hit.collider.name == mCharacter.name) {
mCharacterComponent.GetHurt();
// 播放枪声
private void PlayShotSound() {
mGunAudio.PlayOneShot(mGunAudio.clip);
private void DrawPieces(RaycastHit hit) {
for (int i = 0; i & 5; ++i) {
GameObject p = Transform.Instantiate(mPiece);
// 碎片撞击到物体后的反弹位置
Vector3 fwd = mCamera.forward * -1;
p.transform.position = hit.
p.GetComponent&Rigidbody&().AddForce(fwd * 100);
// 0.3秒后删除
Destroy(p, 0.3f);
// 播放火花效果
private void PlayFireEffect() {
mFireEffect.Play();
// 人物变量
private int _id = 1;
private int _hp = 100;
private Transform txID;
private TextMesh txIDT
private Transform txHP;
private TextMesh txHPT
public void SetID(int id) {
// 角色血量
public void SetHP(int hp) {
// 更新角色变量/属性
private void UpdataProperties() {
// 显示血量和ID
txIDText.text = &ID:&+_id.ToString();
txHPText.text = &HP:&+_hp.ToString();
// 血量和ID的方向,面向着本机玩家
txID.rotation = mCharacter.
txHP.rotation = mCharacter.
本文已收录于以下专栏:
相关文章推荐
本文由作者@zx一路飞奔出品,转载请注明出处
文章地址:http://blog.csdn.net/u/article/details/
作者微博:http...
从本篇起,我们将进入实战环节,编写一个简单的第一人称射击游戏。
第一人称射击类游戏,FPS(First-person Shooter), 严格来说第一人称射击游戏属于ACT类游戏的一个分支,但和RTS类游戏一样,由于其在世界上的迅速风靡,使之发展成了一个单独的类型...
游戏规则:
         游戏分多个回合,每个回合有N个飞碟,玩家按空格后,321倒数3秒,飞碟飞出,点击鼠标,子弹飞出。飞碟落地或被击中,则准备下一次射击。每回合飞碟的大小、颜色、发射位置、发射...
Unity3d局域网PVP系统主要用来实现局域网对战功能,玩家可以建立自己的主机,其他玩家可以访问到该主机并使用RPC进行数据传输。
建立LANPVPMng.cs脚本来实现以下功能:
1、玩家建立...
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 第一人称射击网游 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信