2/3D游戏:3D

辅助插件:角色控制器

游戏制作难度系数:中级

用到的其他工具:network

一、解决由于子弹射击速度过快而无法打到物体的问题

    //方法一:
public float Speed = ;
Vector3 originalPos;
void Update()
{
originalPos = transform.position; //获取子弹现在的位置
transform.Translate(Vector3.forward * Speed * Time.deltaTime); //移动子弹,每秒移动800米
Vector3 direction = transform.position - originalPos; //获取子弹移动的方向
float distance = (transform.position - originalPos).magnitude; //获取子弹移动的距离
RaycastHit hit;
if (Physics.Raycast(originalPos, direction, out hit, distance))
{
//其他逻辑操作。。。
}
} //方法二:
public float Speed = ;
Vector3 startPos;
Vector3 endPos;
void Start()
{
//给子弹施加一个向前的力
GetComponent<Rigidbody>().AddForce(Vector3.forward * Speed, ForceMode.Force);
}
void Update()
{
startPos=endPos;
endPos=transform.position;
float distance = (startPos - endPos).magnitude; //获取子弹移动的距离
Ray r = Camera.main.ScreenPointToRay(startPos);
RaycastHit hit;
if (Physics.Raycast(r, out hit, distance))
{
//其他逻辑操作。。。
}
}

二、解决弹痕的位置问题

因为弹痕是一个贴图,所以当射击到某个点上时,我们要把此贴图贴在此点上面,具体实现代码如下:

            GameObject goo = Instantiate(go, hit.point, Quaternion.identity) as GameObject;//实例化一张弹痕贴图
goo.transform.LookAt(hit.point - hit.normal); //使弹痕贴图面向法线上的点 LookAt:旋转物体使z轴指向目标物体。
goo.transform.Translate(Vector3.back * 0.01f); //使弹痕贴图向上移一点,避免贴图与地面重合而造成弹痕贴图显示不正常或无法显示

三、设置弹痕缓慢消失的效果

    public float speed = 0.3f;
private float lefttime = ;
Material meterial;
void Start()
{
meterial = renderer.material;
}
void Update()
{
if (meterial.color.a < 0.005)
{
Destroy(this.gameObject);
}
lefttime += Time.deltaTime;
if (lefttime > 2f) //弹痕出现2秒后,开始执行逐渐透明效果
{
meterial.color = Color.Lerp(meterial.color, Color.clear, speed * Time.deltaTime); // Color.clear 为透明色,设置物体逐渐透明
}
}

 四、设置头盔在骨骼关节下

因为动画是控制模型的骨骼关节,所以必须把头盔放在相应的骨骼关节下,才能实现头盔跟随动画的运动而运动,而不能放在模型的渲染(Mesh Renderer)节点下,渲染节点只是挂了一个渲染组件,来渲染模型的样子的!

五、解决动画和代码控制模型关节冲突的问题

一旦一个模型正在播放动画,我们是无法使用代码控制模型的关节的,因为模型的关节是被动画控制的,动画会在每一帧的update方法里面去控制关节的Transform(这里可以联想到http://www.cnblogs.com/MrZivChu/p/ik.html 基础 -> 3,从3下面的图中可以看出动画确实是控制模型的每一个关节的Transform的),所以我们必须在LateUpdate里面用代码控制模型的关节!

六、控制人物移动

使用CharacterController来控制,主要使用到了CharacterController自带实例的相关脚本

void Update()
{
if (characterController.isGrounded == false)
{
//播放下落的动画
networkView.RPC("PlayState", RPCMode.AllBuffered, "soldierFalling");
}
else
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
if (Mathf.Abs(h) > 0.05f || Mathf.Abs(v) > 0.05f)
{
networkView.RPC("PlayState", RPCMode.AllBuffered, "soldierWalk");
}
else
{
networkView.RPC("PlayState", RPCMode.AllBuffered, "soldierIdle");
}
}
}

CS局域网射击的更多相关文章

  1. C#源码500份

    C Sharp  短信发送平台源代码.rar http://1000eb.com/5c6vASP.NET+AJAX基础示例 视频教程 http://1000eb.com/89jcC# Winform ...

  2. 3D位置语音,引领吃鸡游戏体验升级

    欢迎大家前往云加社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯游戏云 导语:在刚刚结束的首届腾讯用户开放日上,腾讯音视频实验室带着3D位置音效解决方案,向所有用户亮相,为用户提供360度立体空间的 ...

  3. 怀旧浪潮来袭,小霸王游戏、windows95......曾经的经典哪些能戳中你的心怀?

    随着前两天上架的 Rewound 在 iPhone 上复刻了 iPod Classic为大家掀起一场怀旧浪潮,那么除了 Rewound还有什么经典?今天我们就来怀旧一下那些曾经的经典.80经典小霸王游 ...

  4. vista/win7系统 红警/CS/星际争霸 局域网连接方法

    昨晚,闲来无事,忽然想起打红警来,于是和宿舍舍友商量一起联机打红警, 可是在win7下不能联机红警,网上很多人都这么说,昨晚我折腾了2小时,终于解决了这个问题. win7系统是可以联机打红警的!!!! ...

  5. 来玩一局CS吗?UE4射击游戏的独立服务器构建

    前言   根据UE4官方文档的介绍,UE4引擎在架构时就已经考虑到了多人游戏的情景,多人游戏基于客户端-服务器模式(CS模式).也就是说,会有一个服务器担当游戏状态的主控者,而连接的客户端将保持近似的 ...

  6. 常看常遇见之一——BS架构VS CS架构

    常看常遇见之一——BS架构VS CS架构 1.BS架构 即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构.在这种结构下,用户 ...

  7. 局域网聊天软件(winsocket)

    LANChat工作整理 2013/8/22 程序实现功能: 局域网聊天软件,启动即可找到在线设备,并能够进行简单的文字聊天. 其实下面这个框图已经说明了程序的绝大部分功能原理. 核心类的程序框图 我觉 ...

  8. CS 和 BS 的区别和优缺点

    通俗来讲: bs是浏览器(browser)和服务器(server) cs是静态客户端程序(client)和服务器(server) 区别在于,虽然同样是通过一个程序连接到服务器进行网络通讯,但是bs结构 ...

  9. 什么是CS和BS结构,两种结构的区别

    什么是CS和BS结构,两种结构的区别 什么是C/S和B/S结构?         C/S又称Client/Server或客户/服务器模式.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系 ...

随机推荐

  1. HDU 3639 Hawk-and-Chicken(强连通分量+缩点)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u013480600/article/details/32140501 HDU 3639 Hawk-a ...

  2. 问题 B: 投简历

    题目描述 小华历经12寒窗苦读,又经历4年大学磨砺,终于毕业了,随着毕业季的到来,找工作也日益紧张起来.由于要面试不同的公司,因此小华需要准备不同的简历.当然最基本的信息是必不可少的,基本信息:姓名. ...

  3. a=a+(a++);b=b+(++b);计算顺序,反汇编

    a=a+(a++); 013913BC mov eax,dword ptr [a] 013913BF add eax,dword ptr [a] 013913C2 mov dword ptr [a], ...

  4. background-position设置

    设置背景图片的位置:background-position:x y; 其中x和y可以为百分比也可以为像素

  5. Angular/cli的安装

    Angular cli 是一个命令行工具,用来创建,打包,发布项目. Angular cli 安装之前必须先安装Node 6.9.0及以上版本,NPM 3 及以上版本. 在cmd控制台窗口执行命令no ...

  6. jquery ajax参数

    //默认请求参数 var _options = { url: null, // 请求连接地址 type: 'GET', // 请求类型(get,post) data: null, // post时请求 ...

  7. v-for的显示过滤/排序结果

    对于v-for列表渲染指令,项目中很常用的额,但是我们一般可能在从后端接口拿到数据的时候就把数据通过循环整理改造成自己想要的样子了.有时候可能对于不同的列表需求,还要在data里多造一份数据. 这种做 ...

  8. ES6的数组方法之Array.from

    首先说说什么是数组:数组在类型划分上归为Object,属于比较特殊的对象,数组的索引值类似于对象的key值. 数组的几个注意点: 1.数组的长度是可读属性,不可更改,数组的长度根据索引最大值. 2.数 ...

  9. python核心编程2 第八章 练习

    8–2. 循环. 编写一个程序, 让用户输入三个数字: (f)rom, (t)o, 和 (i)ncrement . 以 i为步长, 从 f 计数到 t , 包括 f 和 t . 例如, 如果输入的是 ...

  10. Centos6.8安装python3.6

    1.目的简介: centos默认使用的是python 2.6.6,而python的2.x 和 3.x 是两个不兼容的版本,到目前的python发展,都已经过渡到了python 3.x,所以需要手动将p ...