Unity3D场景漫游以及碰撞防止反弹

这两天一直在做一个漫游的东西,漫游的代码,网上各种各样,都有,但是在漫游的过程中出现一个问题,那就是碰到墙壁之后会穿墙,或者是会反弹,摄像机一直在抖动,这样看起来很不爽,

漫游的程序就不多少了,有好多,我这用了两种:

1.采用滑动的偏移量来控制移动,这包括三种,

第一一种是鼠标的Input.GetMouseButtonDown(0)和Input.GetMouseButton(0)计算偏移量;

第二种就是使用虚拟轴

float offetX = Input.GetAxis("Mouse X");//左右滑动

float offetY = Input.GetAxis("Mouse Y");//上下滑动

来控制移动和旋转;

第三种,采用就是移动平台下的手指滑动,这个也有好多,也可以用

FingerGestures插件;

这个可以看一看宣雨松的博客,讲的很详细,http://www.xuanyusong.com/archives/1869

也可以用Input.GetTouch(0)手指滑动;

总之一句话就是用的偏差量来控制移动和旋转;

2.防止摄像机穿墙:

相碰的两个物体都要添加Collider,运动的那个物体定要加刚体(给摄像机加一个Capsule子对象,将Collider和Rigidbody加载Capsule的父对象身上),但是防止穿墙就得靠Rigidbody组件的Constraints属性了,分别有Freeze Position(x,y,z)和Freeze Rotation(x,y,z);固定位置和角度,Freeze Rotation(x,y,z)勾上哪一个轴,碰撞之后不超哪一个轴旋转,Freeze Position(x,y,z)控制位置,防止穿墙,x和z轴不能勾,这样碰撞之后就不会穿墙。

3.防止碰撞反弹

这个也不是很难,就是想不到这个问题出在哪,你看了之后就会明白,其实作为刚体,gameObject运动之后,rigidbody.velocity的值是不为Vector(0,0,0),作为刚体,碰撞后本来就会反弹,因而会一直在动,朝着反弹的方向,所以很闹心,但是我们可以将rigidbody.velocity归0,没有速度了就不会反弹了,因为是物理特性的,所以不要写在Update中,

void FixedUpdate()

{

this.GetComponent<Rigidbody>().rigidbody.velocity = new Vector3(0, 0, 0);

}

这就完美的解决了,如果有问题,提出来我们继续讨论

时间: 2024-10-31 22:32:58

Unity3D场景漫游以及碰撞防止反弹的相关文章

场景漫游中的常见操作

今天周六,没有去加班,在家宅了一天了,发现年纪大了,就懒得出去了,就看了一下UE4的基础视频,这些好多虽然已经知道了,但还没有系统的学习过,把不是太清楚的地方记录了下来,以便以后查用. 一 场景漫游操作列表 二切换中英文 三 建立UE4Editor.exe的快捷方式 若Epic Games Launcher 登录不成功,我们可以添加UE4Editor.exe的快捷方式,如下: 四 作业 五 UE4中的基本概念 UE4有很多个Module, GamePlay部分也是一个或多个Module, 每个E

OSG实现场景漫游(转载)

OSG实现场景漫游 下面的代码将可以实现场景模型的导入,然后在里面任意行走,于此同时还实现了碰撞检测. 源代码下载地址: 1 /* 2 * File : Travel.cpp 3 * Description : 4 * Author : GuoShaoHao 5 * E-mail : [email protected] 6 * Date : 2011/01/08 7 * 8 * CopyRight @ South China Institute of Software Engineering,.

Unity3D入门(二):碰撞检測

碰撞器由来 1.系统默认会给每一个对象(GameObject)加入?一个碰撞组件(ColliderComponent),一些背景对象则能够取消该组件. 2.在unity3d中,能检測碰撞发生的方式有两种,一种是利用碰撞器,还有一种则是利用触发器.这两种方式的应用很广泛.为了完整的了解这两种方式,我们必须理解下面概念: (一)碰撞器是一群组件,它包括了非常多种类,比方:Box Collider,Capsule Collider等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上.(

【转】Unity3D 场景切换与持久化简单数据储存(PlayerPrefs类)

本篇文章主要介绍了"Unity3D 场景切换与持久化简单数据储存(PlayerPrefs类)",主要涉及到Unity3D 场景切换与持久化简单数据储存(PlayerPrefs类)方面的内容,对于Unity3D 场景切换与持久化简单数据储存(PlayerPrefs类)感兴趣的同学可以参考一下. 持久化简单的数据储存在Unity3D 中提供了一个简单有效的方法,如果之前的你做过Android的开发你会发现在Unity3D中持久化数据的储存和Android非常的想象.那么下面MOMO 将用一

解析OBJ模型并将其加载到Unity3D场景中

??各位朋友,大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是http://qinyuanpei.com.今天想和大家交流的是解析obj模型并将其加载到Unity3D场景中,虽然我们知道Unity3D是可以直接导入OBJ模型的,可是有时候我们并不能保证我们目标客户知道如何使用Unity3D的这套制作流程,可能对方最终提供给我们的就是一个模型文件而已,所以这个在这里做这个尝试想想还是蛮有趣的呢,既然如此,我们就选择在所有3D模型格式中最为简单的OBJ模型来一起探讨这个问题吧! 关于OBJ模

学习笔记:极客学院-2. Unity3D 基础操作-Scene与场景漫游

QWERT切换场景功能 Q:Scene观察视角移动 W:物体的移动 E:物体的旋转 R:物体的缩放 T: 移动旋转缩放时,按住ctrl可以定量,定量的设置在Edit-snapeSetting设置. privot:坐标基点为自身的中心 center:多选时,坐标基点为多个物体的中心 local:坐标的方向以自身为参照(xyz旋转后不一定是正的) global:坐标的方向以世界为参照 Textured WireFrame 物体边框 Textured Wire显示物体的贴图轮廓 Render Path

OSG 自定义场景漫游示例

一下代码可以简单实现osg中视角的简单自由漫游.并且可以进行简单的碰撞检测 mian.cpp 1 #include <osgViewer/Viewer> 2 3 #include <osg/Node> 4 #include <osg/Geode> 5 #include <osg/Group> 6 7 #include <osgDB/ReadFile> 8 #include <osgDB/WriteFile> 9 10 #include

全景视频外包团队:技术分享Unity3D全景漫游

作者:未知 1.建模中使用的图片.文件.文件夹等以及模型中物体.材质等的名称都不能使用中文或者特殊符号,可以使用英文字母.数字.下划线等 2.调整Max的单位为米 3.烘培光影的设置 4.模型的中的植物效果,第一种是单面片植物,需要设置其轴心为其物体的对称中心:第二种是十字交叉的植物效果:第三种则是到Unity3D编辑器中通过地形编辑器系统添加     基本设置 5.Fbx导出插件下载地址: http://usa.autodesk.com/adsk/servlet/item?siteID=123

Unity3D 场景导出成 XML 并解析还原场景

为了尽可能加快从网络加载场景,我们通常可以把场景先导出成 XML,把优先级高的资源优先加载并显示(地形等),把可以进入场景之后再加载的对象放到最后(比如场景里面的怪物等),本篇一部分代码引用自:http://www.xuanyusong.com/archives/1919,导出场景部分在原作者的代码基础进行了优化,并且整理成了更加方便,容易使用的类库. 先来搭建测试场景(测试场景来源网络),并整理场景中的对象,如图: 然后把场景中的对象都设置成预设,方便打包成 assetbundle 文件(如何