U3D学习笔记(3)

来源:互联网 发布:日语跟读软件 编辑:程序博客网 时间:2024/05/18 11:48


1.可以为了播放一个子弹消失时的音效而再创建一个空对象,挂载一个音效组件,然后它会在实例化时立刻播放音效,再用destroy 延迟销毁
2.粒子编辑器相关
 一个例粒子的添加要有动画,渲染(可以不加,在粒子编辑器里已经有了),发射几种组件一起结合才能起效。
 发射组件有两种,椭圆发射器和mesh发射器,后者更加精细
 Simulate in worldspace是否粒子实时跟随人物?默认点上的,人物移动时粒子不会实时在主角身边刷新,否则粒子只会在原地消失(拖尾效果)。
3.球形爆炸力场可以通过把空对象添加球形碰撞体的来实现,为了不让爆炸特效粒子被该力场影响,把刚体组件去掉
4.勾选静态组件后程序会把所有组件遍历一遍看看有没有其它静态的,效率极低,所以一般通过勾选刚体的(没有就自己加) is kinemanic 来设置静态
5.欧拉角是转到哪个角度,而不是在原来的基础上转动多少度,和Cocos中moveto ,moveby 的区别类似
6.CharacterController和rigid body 是冲突的,它们的作用相似,但是 对于控制的角色来说,
 使用CharacterController更好,可以让你控制的角色不受rigid body 所产生的力和重力的影响,
 更加符合玩家而不是真实的物理(所以角色不会被炸飞而盒子会),但可以发生碰撞:
 一般的碰撞发生条件是:碰撞的两个物体必须都有Collider,并且其中一个有Rigidbody。
 但是如果一方有CharacterController,则不需要。这时碰撞发生的条件为:
 一方有CharacterController,另一方有Collider。CharacterController本身就继承自Collider。
 如果想让角色控制器推开其他刚体或者对象,你可以在对象附加的脚本中添加OnControllerColliderHit()函数,这样对它们施加力就能够产生碰撞
7.四元数翻译成“面向‘’更好理解,即旋转后相对于世界坐标朝向哪个方向。四元数和三元数相乘得到的是一个三元数,表示的是在该四元数的朝向上的朝向(相对坐标系下的朝向)。
8.网上看见的:
  1.勾选Bake into Pose(是否合并成pose 的一部分)则表示选中 Body transform 这里只是纯粹的动画效果,模型的位置和角度参数值不变(表示该转化属于body 自身,当然什么都不改变)
  2.勾选 Apply Root Motion 表示(是否把根动画产生的位移旋转应用到人物身上)Root Transform: 动画的同时,模型的位置和角度会同时跟着变化。(根源的改变,当然会有所改变)
  1、勾选”Bake into Pose",不勾选“Apply Root Motion",勾选”Bake into Pose"后,
 变换属于Body Transform,所以即使这里未勾选”Apply Root Motion“,但是动画依然会在场景中体现,
 人物会按照动画的路径行走(但是如果我们观察Inspector中模型的position参数,值一直不变)。
 但是因为没有勾选Apply Root Motion,所以动画结束后,变换不会应用到模型,所以如果这时候,
 如果开始一个新的动画的话,模型会瞬间回到起始位置(新的动画开始时候,模型处于行走动画开始时的位置)。
  2、勾选”Bake into Pose",并勾选“Apply Root Motion",这里跟上面的情况唯一不同的就是,
 动画结束后,开始新的动画之前,变换会应用到模型。
 (模型的position在新的动画开始之前会发生变化,新的动画开始时候,模型处于动画结束时的位置)
  3、不勾选”Bake into Pose",勾选“Apply Root Motion",这时候,变换是作为Root Transform,
 所以因为这里勾选了Apply Root Motion,变换会应用到模型(模型的position跟着动画不停的变化),
 自然,新的动画开始时候,模型处于动画结束时的位置。
  4、不勾选”Bake into Pose",并且不勾选“Apply Root Motion",这里变化还是作为Root Transform,
 但是因为没有勾选Apply Root Motion,所以变换将不被应用,所以模型将一直在本地不动,
 自然,新的动画开始时候,模型处于行走动画开始时的位置
9.小地图实现:可以使用两个摄像机,然后创建新的一个层a ,创建几个球体,放到角色和怪物下(作为子类),然后主摄像机里去掉显示a ,头顶的摄像头只显示a 层就可以了
10.旋转相关
 旋转函数一般有两种作用,一是为了方向,二是为了旋转角度,很多旋转角度是为了得出它的方向而求的,可以说大部分是为了求方向。forward 和等1,0,0或者nomalize 过的是在不改变旋转角度大小的情况下改变方向
 左手坐标系
 用左手摆出来后,从右到左分别是X,y,z ,所以x (拇指)表示右,z (中指)表示向前
 Quaternion .identity 表示空旋转对象
 四元数翻译成“面向‘’更好理解,即旋转后相对于世界坐标朝向哪个方向。四元数和三元数相乘得到的是一个三元数,表示的是在该四元数的朝向上的各种朝向(相对坐标系下的朝向)。
 Rotate ()有几种重载方式,常用的
 1.轴,角度。
 轴就是一个Vector 类型,一般用forward ,up ,right 和它们的相反数表示相反方向的轴就行了
 2. Quaternion 其实表示的就是一个角度。以后四元数当成角度来看
 3.万像锁是因为不同3D 制作软件中xyz 轴都有层级关系,软件都是先转某个轴再转某个轴来实现旋转的(毕竟只是个软件程序,必须给它个先后层次顺序),
 又因为层级关系父类轴(如y 轴)的转动会导致子轴(x,z )的伴随转动,所以当父轴和一个子轴转到一个平面内时,就失去了一个维度,除非你像自然界一样能自由转动,但在软件中显然会形成万象锁。
 4.x =look rotateion 里可以只写一个方向作为参数,表示让x看向那个方向,例如方向写成y.forward 就是让x 看向y 的前方那个方向。而如果想让b 看向a ,则为(a,b 的位置差),就可以让b 看向a ,
 但是不够平滑,所以一般用Slerp (b .的rotateion ,x )来实现平滑的旋转。
 大部分情况可以用transform .lookat 代替这个
 本质:其实旋转里只是想获得向量的方向,比如上面的b-a ,只是为了获得三维向量b-a 之后所指的是什么方向(都是尾减去头来获取从头连接到尾的方向,如点(1,2,3)和(0,0,0),
 则向量(1,2,3)头减尾得到的,只是为了获得这个方向而已而不是大小,和用(2,4,6)的方向一样)。
 5. 欧拉角eulerAngles:该值是Vector3类型的值,x、y、z分别代表绕x轴旋转x度,绕y轴旋转y度,绕z轴旋转z度。 通常情况下,我们不会单独设置欧拉角其中一个轴,例如eulerAngles.x = 10,
 而是 transform.eulerAngles =new Vector3(0,mY, 0); 这样整体设置.并且这个角度是一个世界坐标系下的角度,如Euler Angle (45,0,0)指的是世界坐标系下绕x 转动到45角的位置,无视你原来的角度。
 当然也可以transform .rotation .Euler Angle 获取当前转向的三个欧拉角,然后进行加减也可以控制人物旋转
 6. var h : float = horizontalSpeed * Input.GetAxis ("Mouse X");
 transform.Rotate (0, h, 0); 就可以实现摄像机水平方向旋转了
 7.transform .forward 等价于transform .rotation .Vector 3.forward 。即rotation (四元数)乘以Vector 3(三元数)等于一个物体在这个方向上(相对坐标系上)的前后左右等方向。
 8.只用一行代码,就可以实现游戏里的跟随了,camera .Position =player .Position -camera .forward .Distance 就可以实现摄像机永远在角色后面Distance 距离看着。和smoothfollow 相比,
 它是在世界坐标上和player 保持一个距离(摄像机不会旋转),而后者则是和player 的背部保持一个距离(摄像机会随着主角转动而转动,所以给人一种人不动场景动的恶心感)。
 9.补充第7点,rotation *Vector 3.forward 相当于在一个转向上获取它的前面一条视野,四元数rotation 是一个宽泛的视野(可以是360),乘以Vector 3后就只获取一条视野线。
 10.Quaternion .Angleaxis (a,b )可以让向量绕b轴转a 度。而不是非要作用在物体上,可以用来获得一个数值,如和transform .rotation 相乘再把值赋给一个变量来获取一个视野


0 0
原创粉丝点击