如何在unity中实现unity3d第一人称射击视角的效果

扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
用unity3d的第一人称控制器会一直往下掉,是在地面之上的
晚晚_WkhP7
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
地形的isTrigger取消下看看
恩,已经解决了
为您推荐:
扫描下载二维码一般在FPS游戏中都会用到第一人称视角,简单介绍一下如何在Unity中添加第一人称视角
1.为摄像机添加角色控制器:
conmponent-&Physics-&Character Controller
2.为摄像机添加C#脚本
代码如下:
//首先定义视角的移动速度和旋转速度
public float speed=3.0f;
public float rotateSpeed=3.0f;
void Update()
//获取控制器组件
CharacterController controller=(CharacterController)base.GetComponent(type(CharacterController));
//定义左右键为视角的旋转
transform.Rotate(0,Input.GetAxis(&Horizontal&)* rotateSpeed,0);
//定义视角的向前是在哪个轴上。(向前应该往哪个方向移动)
Vector3 forward = transform.TransformDirection(Vector3.forward);
//获取前进和后退键
float curSpeed=speed*Input.GetAxis(&Vertical&);
//视角开始移动
controller.SimpleMove(forward*cueSpeed);
本文已收录于以下专栏:
相关文章推荐
研究了一下第一人称控制器后,把它的
作为一个系统介绍Unity3D中Shader编写的系列文章的开篇,本文的第一部分系列文章的前言,然后第二部分介绍了这个系列文章中我们会使用的游戏场景创建方式,最后一部分讲解了如何在Unity中创建和使...
Linux老难题解决了!
Linux工程师很多,甚至有很多有多年工作经验,但是对一些关键概念的理解非常模糊,比如不理解CPU、内存资源等的真正分布,具体的工作机制,这使得他们对很多问题的分析都摸不到方向。比如进程的调度延时是多少?linux能否硬实时?多核下多线程如何执行?
摄像机跟随物体的实现方式很多,也都是现成的代码可以直接拿过来用,但是项目中难免围绕这个功能做扩充,所以简单了解下实现原理还是有必要的, 这边简要介绍两种实现方式:以第一人称视角跟随角色。
     ...
【Unity3d】学习笔记(10)——第一人称控制器的简单实现最近忙于找工作好久没更新博客了,现在工作有了着落,我们继续来学习。在Unity中是可以导入官方的角色控制器的,在assets视图中右键找到...
欢迎大家来到我的博客/home.php?mod=space&uid=3352&do=blog&view=me&from=space
第一人称视角随鼠...
最近一直在搞3D漫游,在第一人称和第三人称视角切换碰到些问题,视角的例子我是导入的官方的character controller包,不得不佩服官方脚本语言的写法,看了一下写的很完美,新手估计比较难看懂...
作为一个系统介绍Unity3D中Shader编写的系列文章的开篇,本文的第一部分为系列文章的前言,然后第二部分介绍了这个系列文章中我们会使用的游戏场景创建方式,最后一部分讲解了如何在Unity中创建和...
一般在FPS游戏中都会用到第一人称视角,简单介绍一下如何在Unity中添加第一人称视角
1.为摄像机添加角色控制器:
conmponent-&Physics-&Character Controll...
他的最新文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Unity3D是一款由Unity Technologies开发的一款游戏引擎,是一种便捷易用的交互式图形化的综合型游戏开发工具。它可以很方便的让非计算机专业的开发人员创建自己的三维电脑游戏、建筑的可视化游历、以及实时交互的三维动画作品。该游戏引擎支持多种系统平台,它开发的作品可以很方便的在PC、MAC等计算机平台上运行,也可以在Android和iOS等移动设备平台上运行,还可直接发布到网页。该游戏引擎还对常用的三维建模软件如3DMAX、Maya有着非常好的兼容性,可以很方便的把在上述三维建模软件当中建造好的各种三维模型导入到游戏场景之中。因此,该开发平台应用非常广泛,特别是在艺术设计领域,更是受到广大开发人员的推崇。该引擎在其内置的StandardAssets资源包的Prefabs项下,提供了一个名为Firsr Person Controller(第一人称控制器)的预制对象。开发人员在游戏场景中加入此预制对象,即可很方便的创建出一个第一人称视...
相关文章推荐
该文通过一个小程序介绍了unity3d开发游戏的流程,并对使用unity3d开发游戏过程中常用的技术进行了说明。
《电脑知识与技术》2012年22期
虚拟技术在许多领域有着广泛的应用。通过三维软件实现建模和贴图,基于Unity3D研究交互式三维多媒体课件开发中的关键技术及具体解决方法,开发出场景逼真、控制灵活、不受观...
《中国教育技术装备》2014年04期
文章在基于Unity3D对数字站区管理应用系统进行开发的基础上,结合数字站区管理应用系统的特点,重点研究系统中的模型、场景、灯光、阴影,以及脚本等部分的优化,并对优化前后...
《地理信息世界》2013年01期
针对电动机产品在销售展示、使用培训、工作原理学习等方面的需求,基于Unity3D游戏开发引擎,设计并实现了电动机虚拟仿真展示Web平台,对电动机的结构、拆装和工作原理进行在...
《黑龙江八一农垦大学学报》2014年03期
该文主要介绍开发一个基于Android智能手机的虚拟化校园模拟平台。通过虚拟化校园,新生及家长能够通过Android手机App进行校园环境熟悉,相比纸质材料和新闻媒体更加直观和全...
《电脑知识与技术》2014年17期
利用三维虚拟现实手段结合传统GIS技术开发三维管理系统对提高管理效率具有重要作用。以我国长城和中山南极科考站站区为研究区,以Unity3D为系统开发平台,重点探讨了开发数字...
《地理信息世界》2013年02期
以安徽电子信息职业技术学院为例,探讨基于Unity3D建立多平台虚拟数字化校园的关键技术,如何利用Unity3D引擎实现虚拟校园场景实时渲染、设计用户界面、数字化校园信息与虚拟...
《蚌埠学院学报》2014年02期
本文简单的阐述了使用Unity3D游戏引擎自带的第一人称控制器创建的第一人称游戏者在水面之下行进时,如何让游戏画面呈现出和其在水面之上时不同的视觉效果。
《计算机光盘软件与应用》2012年15期
以游戏场景设计与优化、AI(人工智能)系统为主要研究目标,阐述游戏场景搭建规范及优化技巧,分析AI设计过程中的主要思路和主要算法实现。通过高效的、复杂的AI系统,创造出游...
《三明学院学报》2013年06期
利用C#脚本和序列化技术,提出一种在Unity3D平台上实现重放功能的设计方法,给出该方法涉及到的部分关键代码。
《广西科学院学报》2013年01期学习利用Unity制作人物残影效果 VR开发教程
这里只针对SkinnedMeshRenderer的网格(也就是带蒙皮的网格)残影,主要原理是根据设定的间隔时间连续的截取当前SkinnedMeshRenderer的网格数据并使用Graphics.DrawMesh画出网格。
一、首先是我们的残影类,为了能及时的Destroy,所以它最好派生至Object:
[csharp]&view plain
class AfterImage : Object&&
& & //残影网格&&
& & public Mesh _M&&
& & //残影纹理&&
& & public Material _M&&
& & //残影位置&&
& & public Matrix4x4 _M&&
& & //残影透明度&&
& & public float _A&&
& & //残影启动时间&&
& & public float _StartT&&
& & //残影保留时间&&
& & public float _D&&
& & public AfterImage(Mesh mesh, Material material, Matrix4x4 matrix4x4, float alpha, float startTime, float duration)&&
& && &&&_Mesh =&&
& && &&&_Material =&&
& && &&&_Matrix = matrix4x4;&&
& && &&&_Alpha =&&
& && &&&_StartTime = startT&&
& && &&&_Duration =&&
属性描述:残影从创建之时起便记录《残影启动时间》,当其生命周期达到或者超过了设定的《残影保留时间》时,该残影即被清除;《残影网格》为残影创建之时从SkinnedMeshRenderer截取而来,保留有当前SkinnedMeshRenderer的网格数据,并依据设定的《残影纹理》在《残影位置》以《残影透明度》DrawMesh。
二、我们再定义一个残影特效类来管理残影:
[csharp]&view plain
using UnityE&&
using System.C&&
using System.Collections.G&&
/// &summary&&&
/// 残影特效&&
/// &/summary&&&
public class AfterImageEffects : MonoBehaviour {&&
& & //开启残影&&
& & public bool _OpenAfterI&&
& & //残影颜色&&
& & public Color _AfterImageColor = Color.&&
& & //残影的生存时间&&
& & public float _SurvivalTime = 1;&&
& & //生成残影的间隔时间&&
& & public float _IntervalTime = 0.2f;&&
& & private float _Time = 0;&&
& & //残影初始透明度&&
& & [Range(0.1f, 1.0f)]&&
& & public float _InitialAlpha = 1.0f;&&
& & private List&AfterImage& _AfterImageL&&
& & private SkinnedMeshRenderer _SkinnedMeshR&&
& & void Awake () {&&
& && &&&_AfterImageList = new List&AfterImage&();&&
& && &&&_SkinnedMeshRenderer = GetComponent&SkinnedMeshRenderer&();&&
& & void Update () {&&
& && &&&if (_OpenAfterImage && _AfterImageList != null)&&
& && &&&{&&
& && && && &if (_SkinnedMeshRenderer == null)&&
& && && && &{&&
& && && && && & _OpenAfterImage =&&
& && && && && &&&
& && && && &}&&
& && && && &_Time += Time.deltaT&&
& && && && &//生成残影&&
& && && && &CreateAfterImage();&&
& && && && &//刷新残影&&
& && && && &UpdateAfterImage();&&
& && &&&}&&
属性描述:《残影的生存时间》为每个残影从创建开始到销毁经历的时间,《生成残影的间隔时间》为残影创建后到下一个残影创建的时间,每个残影都会从《初始透明度》逐渐变化到0透明度并销毁。
生成残影:
[csharp]&view plain
/// &summary&&&
& & /// 生成残影&&
& & /// &/summary&&&
& & void CreateAfterImage()&&
& && &&&//生成残影&&
& && &&&if (_Time &= _IntervalTime)&&
& && &&&{&&
& && && && &_Time = 0;&&
& && && && &Mesh mesh = new Mesh();&&
& && && && &_SkinnedMeshRenderer.BakeMesh(mesh);&&
& && && && &Material material = new Material(_SkinnedMeshRenderer.material);&&
& && && && &SetMaterialRenderingMode(material, RenderingMode.Fade);&&
& && && && &_AfterImageList.Add(new AfterImage(&&
& && && && && & mesh,&&
& && && && && & material,&&
& && && && && & transform.localToWorldMatrix,&&
& && && && && & _InitialAlpha,&&
& && && && && & Time.realtimeSinceStartup,&&
& && && && && & _SurvivalTime));&&
& && &&&}&&
刷新残影:
/// &summary&&&
& & /// 刷新残影&&
& & /// &/summary&&&
& & void UpdateAfterImage()&&
& && &&&//刷新残影,根据生存时间销毁已过时的残影&&
& && &&&for (int i = 0; i & _AfterImageList.C i++)&&
& && &&&{&&
& && && && &float _PassingTime = Time.realtimeSinceStartup - _AfterImageList._StartT&&
& && && && &if (_PassingTime & _AfterImageList._Duration)&&
& && && && &{&&
& && && && && & _AfterImageList.Remove(_AfterImageList);&&
& && && && && & Destroy(_AfterImageList);&&
& && && && && &&&
& && && && &}&&
& && && && &if (_AfterImageList._Material.HasProperty(&_Color&))&&
& && && && &{&&
& && && && && & _AfterImageList._Alpha *= (1 - _PassingTime / _AfterImageList._Duration);&&
& && && && && & _AfterImageColor.a = _AfterImageList._A&&
& && && && && & _AfterImageList._Material.SetColor(&_Color&, _AfterImageColor);&&
& && && && &}&&
& && && && &Graphics.DrawMesh(_AfterImageList._Mesh, _AfterImageList._Matrix, _AfterImageList._Material, gameObject.layer);&&
& && &&&}&&
残影存在透明通道,所以必须要设置纹理的渲染模式为fade模式:
/// &summary&&&
& & /// 设置纹理渲染模式&&
& & /// &/summary&&&
& & void SetMaterialRenderingMode(Material material, RenderingMode renderingMode)&&
& && &&&switch (renderingMode)&&
& && &&&{&&
& && && && &case RenderingMode.Opaque:&&
& && && && && & material.SetInt(&_SrcBlend&, (int)UnityEngine.Rendering.BlendMode.One);&&
& && && && && & material.SetInt(&_DstBlend&, (int)UnityEngine.Rendering.BlendMode.Zero);&&
& && && && && & material.SetInt(&_ZWrite&, 1);&&
& && && && && & material.DisableKeyword(&_ALPHATEST_ON&);&&
& && && && && & material.DisableKeyword(&_ALPHABLEND_ON&);&&
& && && && && & material.DisableKeyword(&_ALPHAPREMULTIPLY_ON&);&&
& && && && && & material.renderQueue = -1;&&
& && && && && &&&
& && && && &case RenderingMode.Cutout:&&
& && && && && & material.SetInt(&_SrcBlend&, (int)UnityEngine.Rendering.BlendMode.One);&&
& && && && && & material.SetInt(&_DstBlend&, (int)UnityEngine.Rendering.BlendMode.Zero);&&
& && && && && & material.SetInt(&_ZWrite&, 1);&&
& && && && && & material.EnableKeyword(&_ALPHATEST_ON&);&&
& && && && && & material.DisableKeyword(&_ALPHABLEND_ON&);&&
& && && && && & material.DisableKeyword(&_ALPHAPREMULTIPLY_ON&);&&
& && && && && & material.renderQueue = 2450;&&
& && && && && &&&
& && && && &case RenderingMode.Fade:&&
& && && && && & material.SetInt(&_SrcBlend&, (int)UnityEngine.Rendering.BlendMode.SrcAlpha);&&
& && && && && & material.SetInt(&_DstBlend&, (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);&&
& && && && && & material.SetInt(&_ZWrite&, 0);&&
& && && && && & material.DisableKeyword(&_ALPHATEST_ON&);&&
& && && && && & material.EnableKeyword(&_ALPHABLEND_ON&);&&
& && && && && & material.DisableKeyword(&_ALPHAPREMULTIPLY_ON&);&&
& && && && && & material.renderQueue = 3000;&&
& && && && && &&&
& && && && &case RenderingMode.Transparent:&&
& && && && && & material.SetInt(&_SrcBlend&, (int)UnityEngine.Rendering.BlendMode.One);&&
& && && && && & material.SetInt(&_DstBlend&, (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);&&
& && && && && & material.SetInt(&_ZWrite&, 0);&&
& && && && && & material.DisableKeyword(&_ALPHATEST_ON&);&&
& && && && && & material.DisableKeyword(&_ALPHABLEND_ON&);&&
& && && && && & material.EnableKeyword(&_ALPHAPREMULTIPLY_ON&);&&
& && && && && & material.renderQueue = 3000;&&
& && && && && &&&
& && &&&}&&
三、效果图如下:
四、我将完整的源码贴一遍,只需要新建一个脚本AfterImageEffects,复制以下源码到其中,然后挂在有SkinnedMeshRenderer组件的模型上,并勾选OpenAfterImage,运行便可以看到效果:
[csharp]&view plain&copy
using UnityE&&
using System.C&&
using System.Collections.G&&
/// &summary&&&
/// 残影特效&&
/// &/summary&&&
public class AfterImageEffects : MonoBehaviour {&&
& & //开启残影&&
& & public bool _OpenAfterI&&
& & //残影颜色&&
& & public Color _AfterImageColor = Color.&&
& & //残影的生存时间&&
& & public float _SurvivalTime = 1;&&
& & //生成残影的间隔时间&&
& & public float _IntervalTime = 0.2f;&&
& & private float _Time = 0;&&
& & //残影初始透明度&&
& & [Range(0.1f, 1.0f)]&&
& & public float _InitialAlpha = 1.0f;&&
& & private List&AfterImage& _AfterImageL&&
& & private SkinnedMeshRenderer _SkinnedMeshR&&
& & void Awake () {&&
& && &&&_AfterImageList = new List&AfterImage&();&&
& && &&&_SkinnedMeshRenderer = GetComponent&SkinnedMeshRenderer&();&&
& & void Update () {&&
& && &&&if (_OpenAfterImage && _AfterImageList != null)&&
& && &&&{&&
& && && && &if (_SkinnedMeshRenderer == null)&&
& && && && &{&&
& && && && && & _OpenAfterImage =&&
& && && && && &&&
& && && && &}&&
& && && && &_Time += Time.deltaT&&
& && && && &//生成残影&&
& && && && &CreateAfterImage();&&
& && && && &//刷新残影&&
& && && && &UpdateAfterImage();&&
& && &&&}&&
& & /// &summary&&&
& & /// 生成残影&&
& & /// &/summary&&&
& & void CreateAfterImage()&&
& && &&&//生成残影&&
& && &&&if (_Time &= _IntervalTime)&&
& && &&&{&&
& && && && &_Time = 0;&&
& && && && &Mesh mesh = new Mesh();&&
& && && && &_SkinnedMeshRenderer.BakeMesh(mesh);&&
& && && && &Material material = new Material(_SkinnedMeshRenderer.material);&&
& && && && &SetMaterialRenderingMode(material, RenderingMode.Fade);&&
& && && && &_AfterImageList.Add(new AfterImage(&&
& && && && && & mesh,&&
& && && && && & material,&&
& && && && && & transform.localToWorldMatrix,&&
& && && && && & _InitialAlpha,&&
& && && && && & Time.realtimeSinceStartup,&&
& && && && && & _SurvivalTime));&&
& && &&&}&&
& & /// &summary&&&
& & /// 刷新残影&&
& & /// &/summary&&&
& & void UpdateAfterImage()&&
& && &&&//刷新残影,根据生存时间销毁已过时的残影&&
& && &&&for (int i = 0; i & _AfterImageList.C i++)&&
& && &&&{&&
& && && && &float _PassingTime = Time.realtimeSinceStartup - _AfterImageList._StartT&&
& && && && &if (_PassingTime & _AfterImageList._Duration)&&
& && && && &{&&
& && && && && & _AfterImageList.Remove(_AfterImageList);&&
& && && && && & Destroy(_AfterImageList);&&
& && && && && &&&
& && && && &}&&
& && && && &if (_AfterImageList._Material.HasProperty(&_Color&))&&
& && && && &{&&
& && && && && & _AfterImageList._Alpha *= (1 - _PassingTime / _AfterImageList._Duration);&&
& && && && && & _AfterImageColor.a = _AfterImageList._A&&
& && && && && & _AfterImageList._Material.SetColor(&_Color&, _AfterImageColor);&&
& && && && &}&&
& && && && &Graphics.DrawMesh(_AfterImageList._Mesh, _AfterImageList._Matrix, _AfterImageList._Material, gameObject.layer);&&
& && &&&}&&
& & /// &summary&&&
& & /// 设置纹理渲染模式&&
& & /// &/summary&&&
& & void SetMaterialRenderingMode(Material material, RenderingMode renderingMode)&&
& && &&&switch (renderingMode)&&
& && &&&{&&
& && && && &case RenderingMode.Opaque:&&
& && && && && & material.SetInt(&_SrcBlend&, (int)UnityEngine.Rendering.BlendMode.One);&&
& && && && && & material.SetInt(&_DstBlend&, (int)UnityEngine.Rendering.BlendMode.Zero);&&
& && && && && & material.SetInt(&_ZWrite&, 1);&&
& && && && && & material.DisableKeyword(&_ALPHATEST_ON&);&&
& && && && && & material.DisableKeyword(&_ALPHABLEND_ON&);&&
& && && && && & material.DisableKeyword(&_ALPHAPREMULTIPLY_ON&);&&
& && && && && & material.renderQueue = -1;&&
& && && && && &&&
& && && && &case RenderingMode.Cutout:&&
& && && && && & material.SetInt(&_SrcBlend&, (int)UnityEngine.Rendering.BlendMode.One);&&
& && && && && & material.SetInt(&_DstBlend&, (int)UnityEngine.Rendering.BlendMode.Zero);&&
& && && && && & material.SetInt(&_ZWrite&, 1);&&
& && && && && & material.EnableKeyword(&_ALPHATEST_ON&);&&
& && && && && & material.DisableKeyword(&_ALPHABLEND_ON&);&&
& && && && && & material.DisableKeyword(&_ALPHAPREMULTIPLY_ON&);&&
& && && && && & material.renderQueue = 2450;&&
& && && && && &&&
& && && && &case RenderingMode.Fade:&&
& && && && && & material.SetInt(&_SrcBlend&, (int)UnityEngine.Rendering.BlendMode.SrcAlpha);&&
& && && && && & material.SetInt(&_DstBlend&, (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);&&
& && && && && & material.SetInt(&_ZWrite&, 0);&&
& && && && && & material.DisableKeyword(&_ALPHATEST_ON&);&&
& && && && && & material.EnableKeyword(&_ALPHABLEND_ON&);&&
& && && && && & material.DisableKeyword(&_ALPHAPREMULTIPLY_ON&);&&
& && && && && & material.renderQueue = 3000;&&
& && && && && &&&
& && && && &case RenderingMode.Transparent:&&
& && && && && & material.SetInt(&_SrcBlend&, (int)UnityEngine.Rendering.BlendMode.One);&&
& && && && && & material.SetInt(&_DstBlend&, (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);&&
& && && && && & material.SetInt(&_ZWrite&, 0);&&
& && && && && & material.DisableKeyword(&_ALPHATEST_ON&);&&
& && && && && & material.DisableKeyword(&_ALPHABLEND_ON&);&&
& && && && && & material.EnableKeyword(&_ALPHAPREMULTIPLY_ON&);&&
& && && && && & material.renderQueue = 3000;&&
& && && && && &&&
& && &&&}&&
public enum RenderingMode&&
& & Opaque,&&
& & Cutout,&&
& & Fade,&&
& & Transparent,&&
class AfterImage : Object&&
& & //残影网格&&
& & public Mesh _M&&
& & //残影纹理&&
& & public Material _M&&
& & //残影位置&&
& & public Matrix4x4 _M&&
& & //残影透明度&&
& & public float _A&&
& & //残影启动时间&&
& & public float _StartT&&
& & //残影保留时间&&
& & public float _D&&
& & public AfterImage(Mesh mesh, Material material, Matrix4x4 matrix4x4, float alpha, float startTime, float duration)&&
& && &&&_Mesh =&&
& && &&&_Material =&&
& && &&&_Matrix = matrix4x4;&&
& && &&&_Alpha =&&
& && &&&_StartTime = startT&&
& && &&&_Duration =&&
<font color=#-02<font color=#-28<font color=#-27<font color=#-27<font color=#-26<font color=#-27<font color=#-26<font color=#-24<font color=#-22<font color=#-22
想知道在Unity中如何将游戏中角色对话的唇型与面部微表情达到次时代的水准吗?想知道...
近日,RLTY CHK工作室的联合创始人Nick Robinson发布了一篇文章,以媒体天师麦克卢汉...
VR设计师和开发者们开始着手如何让VR环境及体验更加有趣、逼真。以下是一些关于如何为room...
笔者在为《幻想装置》和《工作模拟》制作出混合现实的预告片以后,研究了更深层次的VR...
关于用EasyAR SDK 搭建AR 开发环境的教程,我已经写过很多了,不懂得朋友可以看下我之...}

我要回帖

更多关于 unity 第一人称控制器 的文章

更多推荐

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

点击添加站长微信