unity--18 小总结,移动物体及旋转

3d物体移动–变换组件

移动物体的位置基本上可以分为三个大类,

第一种是直接赋值:

        transform.position += Vector3.left * Time.deltaTime;
        //transform.position += -transform.right * Time.deltaTime;

要么是vector3的静态属性,要么是tranform的属性,vector3更加齐全,包括左右,上下,前后。
而transform的属性只有右,上,前,获取对应的反方向要加负号。
unity--18 小总结,移动物体及旋转_第1张图片
另外,如果物体自身的轴与世界坐标轴不一致。那么vector3.left 的移动是以世界坐标为准,而-transform.right是以自身轴系为准。

适用于:已知移动方向和速度的时候

第二种调用Translate方法,该方法默认是以自身轴系为准:
transform.Translate(Vector3.left * Time.deltaTime);

①和前面的直接赋值没区别,效果一样,唯一的区别在于Translate还可以指定以哪个坐标系为基准。
默认的是 Space.Self,如果要以世界坐标为准,则改为Space.World
unity--18 小总结,移动物体及旋转_第2张图片
②重载形式,直接提供浮点数

        transform.Translate(-0.01f,0,0);

③重载形式,相对于某个物体的轴系移动

//相对于主摄像机的轴系位置移动
        transform.Translate(Vector3.right * Time.deltaTime, Camera.main.transform);

unity--18 小总结,移动物体及旋转_第3张图片
Translate方法可以完全替代+=赋值

第三种是 Vector3.MoveTowards方法

适用于知道起始点,终点,速度的时候。

	 Vector3 target;
     float speed;


    private void Start()
    {
        target = new Vector3(10, 10, 10);
        speed = 10 ;
    }

    void Update()
    {
    // 起点,终点,速度
        transform.position = Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime);
    }

旋转

同理,旋转物体也是可以用

transform.Rotate(Vector3.right * Time.deltaTime);

它以自身的轴为基准,含义是以自身x轴(红色轴)为轴心向里旋转。
unity--18 小总结,移动物体及旋转_第4张图片
如果是Vector3.left,以自身x轴(红色轴)为轴心向外旋转。
想要以世界坐标轴,则添加

        transform.Rotate(Vector3.right * Time.deltaTime,Space.World);

你可能感兴趣的:(游戏引擎)