U3D问题总结(实时更新,建议收藏)

1,自身坐标系和世界坐标系

场景中的物体有两个坐标系,一个是自身坐标系,也叫本地坐标系,另外一个是世界坐标系

比如说我们在场景中创建一个cube,把它的参数reset。在Scene窗口那里

 红色框框那里就可以修改物体所在的坐标系

 Global就是世界坐标系,Local就是自身坐标系,我们当前选择的是自身坐标系,我们切换世界坐标系看看,发现cube的坐标轴没有任何变化。但是我们回到自身坐标系,我们将cube的x轴的旋转值设置成90,然后再切换世界坐标系就会发现,两个坐标系的坐标轴不一样。

这是因为世界坐标系不会变,x轴指哪就一直指哪,但是自身坐标系不一样,自身坐标系会随着自身的旋转而改变坐标系。

2,Transform.Translate

作用:将物体沿某一方向移动

演示

在场景中添加一个cube,然后创建一个C#脚本,将这个脚本拖给Main Camera,然后在脚本里添加下面代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    public GameObject cube;
    private void Update()
    {
        cube.transform.Translate(new Vector3(0,1,0));  
    }
}

意思就是将这个cube沿着自身坐标系的y轴方向移动 

3,Unity中的旋转和方向

官方手册:Rotation and orientation in Unity - Unity 手册 

简单说一下就是unity中使用欧拉角和四元数来表示旋转和方向,其实大部分三维软件包括ue也用的这个。

简而言之,欧拉角就是比较直观的,属性面板那个的坐标下的rotation的三个轴就是欧拉角,不过欧拉角会出现万向节锁定的问题,所以内部用四元数来表示旋转和方向。

也就是说外面使用的是欧拉角,便于用户操作,内部使用的四元数,四元数稳定且高效,不会出现万向节锁定的问题。

我们在脚本中打印transform下的rotation发现就是一个四元数,这和面板上的三个轴不一样,面板上使用的就是欧拉角,内部使用的是四元数

4,欧拉角和四元数的转换

5,Mathf.SmoothDamp

SmoothDamp(平滑阻尼)函数用于平滑缓冲移动,多用于摄像头移动 

如果作用在移动中上,表现为慢慢减速到目标位置,类似这个函数还有vector3.Lerp插值函数,不过Lerp的粗暴的插值,而SmoothDamp则更smooth,一般用于摄像头移动

函数原型

public static float SmoothDamp(float current, float target, ref float currentVelocity, float smoothTime, float maxSpeed);

current:需要改变的参数的当前值

target:目标值

currentVelocity:函数所作用目标移动的最大速度,这个所谓的速度,表征的是该物体每秒移动Unity内多少个单位。需要注意的是:首先在传参时记得加上ref关键字,因为SmoothDamp的内部会更新这个值并且传递出来,其次,这个传入的参数的生命周期需要比SmoothDamp长,因为SmoothDamp内部会根据上一次计算得到的速度,去更新下一次的位置,简单的方法就是把这个传入的参数设为全局变量。 

smoothTime:平滑的时间

maxSpeed:最大速度(可不传)

6,Vector3.Lerp

lerp线性插值,和smoothDamp类似

函数原型

 a:插值的起始值

b:插值的结束值

t:插值距离,范围是[0,1]

比如t为0.5的话,那么返回的就是a到b的中间值,t为0.3的话,返回的就是a到b大小的30%的值

t为0的话返回就是a,t为1的话返回就是b

t才是决定返回位置的关键参数

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真的没事鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值