如何在unity中实现unity 第一人称控制视角的效果

Unity3d怎么设置第一人称视角_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
Unity3d怎么设置第一人称视角
我有更好的答案
在自带资源包里面有一个First Person Controller,直接拖到你的场景当中就可以用了,只要你设置好碰撞物体,就可以达到你想要的效果
为您推荐:
其他类似问题
等待您来回答后使用快捷导航没有帐号?
只需一步,快速开始
&加载中...
查看: 1999|回复: 3
unity自带第一人称控件,放进去后左右旋转是斜的?
TA的其他好贴
马上注册,加入CGJOY,让你轻松玩转CGJOY。
才可以下载或查看,没有帐号?
按着教程做的,教程视频里,同样操作,他直接拖入的Unity自带的第一人称控件,运行时左右看是平的,而我运行时看起来是歪的?就像好像沿着胶囊的哪个圆顶选择一样不是水平的,而视频里的是正常FPS那样的平移视角?
如何让别人关注你?
补充一下用的是4.15最新版本,视频教程用的是4.1版本,是不是有什么变动需要修改?
本楼回复(<span id="dp_count_)
如何让别人关注你?
自己解决了,因为绑到场景中的主摄像机下面了,这网站真冷清
本楼回复(<span id="dp_count_)
如何让别人关注你?
你好。我现在遇到了类似的问题。我添加了一个天空盒,然后往盒子的六个面张贴了六张图片,然后在中间位置添加一个camera做定点自由观察,也是竖直方向会倾斜,请问怎么解决啊?和你遇到的是一个问题吗?已经困扰我好几天了这破问题。希望能帮帮忙。谢啦。。
本楼回复(<span id="dp_count_)
如何让别人关注你?
Powered byUnity3D第一人称视角游戏者水下视觉效果的实现_论文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Unity3D第一人称视角游戏者水下视觉效果的实现
中国最大最早的专业内容网站|
总评分0.0|
&&本文简单的阐述了使用Unity3D游戏引擎自带的第一人称控制器创建的第一人称游戏者在水面之下行进时,如何让游戏画面呈现出和其在水面之上时不同的视觉效果。
试读已结束,如果需要继续阅读或下载,敬请购买
定制HR最喜欢的简历
你可能喜欢
您可以上传图片描述问题
联系电话:
请填写真实有效的信息,以便工作人员联系您,我们为您严格保密。请完成以下验证码
您当前的位置: &
如何在Unity中实现非真实感渲染
查看: 1304|
《Twin Souls: Path of the Shadows》是一款游戏性很强,且具有优质卡通渲染效果的端游,本文将由Unity大中华区技术经理马瑞,为大家分享如何使用Unity的渲染管道来实现像《Twin Souls: Path of the Shadows》一样的卡通渲染的效果。卡通渲染的原理卡通渲染是一种非真实感渲染,也叫作Cel Shading或Toon Shading,旨在通过使用较少的阴影颜色,而非阴影梯度或色调及阴影,使3D计算机图形显得平坦。上图中,从左至右分别是Diffuse着色器,Cel Shading和有三个阈的Cel Shading。 我们认为一个像素接收的光量是光方向和表面法线之间的点积(NdotL)。如果将此值取整为0或者1,或者定义不同的“等级”或“阈”,将导致不同的卡通渲染样式。在最简单的卡通渲染中,如果点积大于零,则将像素设置为点亮,如果点积小于零,则将像素设置为阴影。实现方法此效果可以根据您的渲染路径(Rendering Path)以不同的方式实现。渲染路径(Rendering Path)可以在相机的检视面板(Inspector)中设置。下面我们介绍一下正向渲染和延迟渲染,如果您对它们的具体实现代码感兴趣请点击【阅读原文】查看。
正向渲染如果您的场景不使用多光源,正向渲染(Forward Rendering)是一个不错的选择。因为在这种模式下,渲染引擎会遍历所有光源的每个顶点和像素,可能会带来较大负担。 然而,如果您的场景只有几个或甚至一个光源,这个解决方案是非常轻量级的。具体实施的时候,您可以创建一个新的表面着色器(surface shader),您通过下面的代码,让边缘平滑。 NdotL&=&smoothstep(0,&0.025f,&NdotL);
延迟渲染延迟渲染(Deferred Rendering)的优点是它在多光源的场景中可以表现出很好的性能。当使用延迟渲染(Deferred Rendering)时,引擎会遍历场景中的每个光源,并将其与场景中的几何信息一起存储在缓冲区中。要改变延迟渲染(Deferred Rendering)管道,我们需要从Unity网站上下载内置着色器包。接下来,对下载好的文件进行解压缩,在“DefaultResourcesExtra”文件夹中找到“Internal-DeferredShading.shader”,并将此文件复制到项目中的Resources文件夹。因为自从最初的解决方案发布以来,Unity进行了很多更新,所以我们还需要做以下步骤:在解压缩的文件夹中找到UnityStandardBRDF.cginc和UnityDeprecated.cginc,并将它们移动到项目中的Resources文件夹。将UnityDeprecated.cginc重命名为UnityDeprecatedEx.cginc,并使用以下代码替换整个代码,以便添加CustomLambertTerm&。inline&half&CustomDotClamped&(&half3&a,&half3&b&) {& &&&&#if&(SHADER_TARGET&&&30) &&&&return&saturate(dot(a,b)); &&&&#else &&&&return&max(0.0h,&dot(a,b)); &&&&#endif }
inline&half&CustomLambertTerm&(&half3&normal,&half3&lightDir&)& { &&return&smoothstep(0.0,0.05f,&CustomDotClamped&(normal,&lightDir)); }将UnityStandardBRDF.cginc重命名为UnityStandardBRDFCustom.cginc,删除其中的整个代码,并用BRDF_1_Unity_PBS方法的自定义实现替换它。它被重命名为BRDF_CUSTOM_Unity_PBS且使用我们的CustomLambertTerm。在导入的Internal-DeferredShading.shader中,使用UnityStandardBRDFCustom.cginc中定义的自定义宏重写UNITY_BRDF_PBS函数宏:#define&UNITY_BRDF_PBS&BRDF_CUSTOM_Unity_PBS在着色器中包含UnityStandardBRDF.cginc和UnityStandardBRDFCustom.cginc:#include&"UnityStandardBRDF.cginc" #include&"UnityStandardBRDFCustom.cginc"由于UNITY_BRDF_PBS函数完全被覆盖,因此可以从Internal-DeferredShading.shader中删除UnityPBSLighting.cginc。在着色器中添加以下行:if&(light.ndotl&&=&0.0)& &&&&&&&&&&&&&light.ndotl&=&0; &&&&&&&&&&&&else& &&&&&&&&&&&&&light.ndotl&=&1;最后,当所有这些步骤完成后,我们的Internal-DeferredShading.shader就大功告成了!然后,我们可以用新创建的着色器替换Deffered着色器:到Edit - & ProjectSettings - & Graphics。在Deferred中,选择我们要修改的文件。之后,确保您的相机正在使用所需的渲染路径(延迟的Deferred), 现在您应该注意标准着色器(Standard Shader)已经应用了卡通渲染,如下图所示。边缘许多游戏使用卡通渲染对物体(Object)勾画轮廓,这样场景会有漫画一般的视觉效果。这种效果可以用许多不同的方式实现。 轮廓可以是纹理的一部分,着色器可以检查表面法线和视角之间的点积,或者可以在后处理中完成。最简单的解决方案是在您的相机中添加Edge Detection效果:点击Assets-&Import Package-&Effects,导入Standard Assets Effects包在层级结构(Hierarchy)中选择您的摄像机,然后在检视面板(Inspector)中点击 Add Component-&Image Effects-&Edge Detection-&Edge Detection&突出边缘的效果如下图所示。最终效果在本文中,我们借助对《Twin Souls: The Path of Shadows》进行卡通渲染的解决方案,更改Unity的渲染管道以实现卡通风格 。最终,几乎没有使用其他添加,我们实现了类似的独特风格,如下图所示。总结非真实渲染技术非常有用,因为它不会替换整个照明模型,只是将现有的模型表面显示为点亮或阴影。它可以与图像效果完美融合,也可以在没有额外性能开销的情况下允许您使用完整的PBR容量。如果您想了解更多有关的技术文章,请访问Unity官方中文社区(forum.)。
微信扫一扫
专注于VR的学习、开发和人才交流
&津ICP备号19150人阅读
Unity3D(159)
最近一直在搞3D漫游,在第一人称和第三人称视角切换碰到些问题,视角的例子我是导入的官方的character controller包,不得不佩服官方脚本语言的写法,看了一下写的很完美,新手估计比较难看懂,里面涉及到一些角度,还有向量等的计算,这就要求有一定的图形学的基础,我将官方的第一人称视角和第三人称视角结合了一下,但发现还是不那么容易,不仅仅只是简单的摄像机的切换和position以及rotation的赋值而已,当然这种方法适合第三人称切换至第一人称,而第一人称切换至第三人称你会发现根本方向就切换不过来,位置是对了,但方向还是原来的方向,这就让我有点苦恼,然后不得已只能硬着头皮去看官方写的控制第三人称人物运行的脚本ThirdPersonController,里面有一些英文的注解,这脚本写的还是有一定的技术含量,毕竟是官方的嘛,想要看懂还是要慢慢静下心来看的。实现步骤:& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&1.导入官方的第一人称和第三人称的Person,会发现,第三人称的Main Camera是在model的外面而第一人称的Main Camera是在model的里面,这里最好统一一下,我将第三人称的那个model拉到我新建的一个空物体下(记得reset这空物体),然后将主摄像机也拖放到这个空物体下,最好确保camera和3rdPersonController平级。这里还要说一下的,将3rdPersonController也reset一下,然后设置PositionY跟相机的Y一样,我这里设置的是51大概。2.创建视角切换的脚本viewpointSwitch,挂在GUI的物体上,这个物体挂了一些关于GUI还有控制鼠标隐藏显示的脚本鼠标隐藏和显示:void Update()
if (Input.GetKey(KeyCode.H))
// Lock the cursor inside gameview
Screen.lockCursor =
// Hide mouse cursor
Screen.showCursor =
if(Input.GetKey(KeyCode.U))
// Lock the cursor inside gameview
Screen.lockCursor =
//Show mouse cursor
Screen.showCursor =
}viewpointSwitch:using UnityE
using System.C
public class ViewpointSwitch : MonoBehaviour {
//从场景中拖入的object
public GameObject Obj_3
public GameObject cam_3
public GameObject gobj_3
public GameObject Obj_1
public GameObject cam_1
public GameObject gobj_1
//记录刚进入第一人称视角时候的欧拉角和离开第一视角时候的欧拉角(Y方向)
float pre1fsAngle = 0;
float cur1fsAngle = 0;
// Update is called once per frame
void Update ()
//切换至第一人称视角
if (Input.GetKey(KeyCode.F1))
//记录一开始
//pre1fsAngle = cam_1fs.transform.eulerAngles.y;
pre1fsAngle = cam_3rd.transform.eulerAngles.y;
//记录的第一人称(这里取的是第三人称,其实是一样的)一开始的y方向欧拉角,这里没用上面注释掉的写法是防止重复按f1键切换然后覆盖初始值导致旋转角度差值缩小
if (!Obj_1fs.activeSelf)
Obj_1fs.SetActive(true);
GameObject.Find(&Main Character Controller&).transform.localPosition = GameObject.Find(&3rd Person Controller&).transform.localP
GameObject.Find(&Main Character Controller&).transform.localRotation = GameObject.Find(&3rd Person Controller&).transform.localR
Obj_3rd.SetActive(false);
//切换至第三人称视角
if (Input.GetKey(KeyCode.F2))
cur1fsAngle = cam_1fs.transform.eulerAngles.y;
if (!Obj_3rd.activeSelf)
Obj_3rd.SetActive(true);
GameObject.Find(&3rd Person Controller&).transform.localPosition = GameObject.Find(&Main Character Controller&).transform.localP
//注意这里Mathf里面的方法是幅度,我这里就进行了一个角度转幅度的计算:幅度=角度*pi/180
float angle = (cur1fsAngle - pre1fsAngle) * Mathf.PI / 180;
gobj_3rd.GetComponent&ThirdPersonController&().v = Mathf.Cos(angle);
gobj_3rd.GetComponent&ThirdPersonController&().h = Mathf.Sin(angle);
print(&旋转角度:& + (cur1fsAngle-pre1fsAngle));
gobj_3rd.GetComponent&ThirdPersonController&().flag =
//这个flag标志是让ThirdPersonController的update方法执行改变上面的v,h一次,然后第二帧的时候就执行v=Input.GetAxisRaw(&Vertical&)和h=Input.GetAxisRaw(&Horizontal&)
Obj_1fs.SetActive(false);
备注://w(1) & s(-1)(前后运动)v = Input.GetAxisRaw(&Vertical&);&//a(-1) & d(1)(左右运动)&h = Input.GetAxisRaw(&Horizontal&);这里的v和h变量要解释一下,v代表前后方向,如果按下前方向w键,这里Input.GetAxisRaw(&Vertical&)会有一个-1~1的一个变化,如果是遥感就会有浮点数,但如果是键盘的话,一般就是0,-1,1三个状态,按下w前进方向键,v会变成1,如果按下后退键s,v就会变成-1,如果不按则是0。h就是代表水平左右轴向,a键按下h=-1,d按下h=1,不按则代表0。ThirdPersonController.js人物旋转的方向是始终转向一个前进的方向向量,var targetDirection = h * right + v *这里的right和forward分表表示X轴(forward方向)和Z轴(right方向)的单位向量var forward = cameraTransform.TransformDirection(Vector3.forward);var right = Vector3(forward.z, 0, -forward.x);效果图:& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&1.刚开始启动,第三人称的模型朝向以及旋转坐标& &&2.按一下D键,也就是右键,人物旋转,90度,朝向以及旋转坐标,以及v,h(控制旋转方向的一个系数,上文有介绍)的值在线展示: & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &==================== 迂者 丁小未 CSDN博客专栏=================MyBlog:& & & & & & &MyQQ:Unity QQ群: & & & & cocos2dx QQ群:======================&相互学习,共同进步&===================&转载请注明出处:欢迎关注我的微博:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1663272次
积分:21618
积分:21618
排名:第382名
原创:416篇
转载:215篇
评论:421条
我叫小未,网名Aladdin,主做U3D游戏程序,不甘于平庸,喜欢尝试,喜欢研究计算机技术,13年9月份开始工作,曾两年就职于巨人网络做游戏客户端程序,闲暇时间做过麦子学院在线讲师,做过独立开发,做过C#游戏服务器和.NET Web服务器,做过IOS原生开发,爱游戏,爱coding!
学习交流群:
阅读:10344
文章:10篇
阅读:21917
文章:12篇
阅读:17754
文章:24篇
阅读:149503
文章:13篇
阅读:27001
文章:31篇
阅读:90803
文章:34篇
阅读:64819
文章:20篇
阅读:50345
(6)(1)(1)(2)(3)(1)(1)(2)(9)(2)(1)(3)(3)(1)(2)(1)(1)(3)(2)(2)(1)(1)(1)(3)(1)(1)(3)(1)(4)(2)(6)(17)(12)(13)(17)(12)(24)(32)(58)(42)(12)(48)(126)(33)(2)(2)(13)(9)(15)(5)(12)(14)(17)(5)(1)(1)(17)(2)(2)}

我要回帖

更多关于 unity实现第一人称 的文章

更多推荐

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

点击添加站长微信