在Unity中自己让物体移动的脚本出现倾斜移动的解决方法

1 篇文章 0 订阅

在初学这个Unity的时候大家往往喜欢自己去写脚本让物体做简单的移动旋转和抬头低头,但是往往会出现抬头和低头的时候再去左右旋转会出现身体侧偏的现象,那么这个原因是因为没有处理好物体的父子关系和坐标系。

出现上种现象是里大家都是把抬头低头和旋转移动的代码写在了一个物体上面,但是事实上,抬头低头是头的事情,而左右旋转和前后左右移动往往是身体的事情,这就牵扯到了父子关系(父动子动,子动父不动)。身体我们一般用一个胶囊体(Capsule)来代替如图:

(身体作为父物体,相机作为子物体)

如此设置好之后,我们需要将移动和旋转的代码给身体(这里的Capsule001)而把抬头和低头的代码给相机

身体的移动和旋转:

    void Update () {
        Move();
	}
    private void Move()         //通过控制键盘wasd和上下左右控制相机身体的位移和左右旋转
    {
        if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
        {
            transform.position += transform.forward * Time.deltaTime * 5;
        }
        if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
        {
            transform.position += transform.forward * Time.deltaTime * -5;
        }
        if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
        {
            transform.position += transform.right * Time.deltaTime * -5;
        }
        if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
        {
            transform.position += transform.right * Time.deltaTime * 5;
        }
        if (Input.GetKey(KeyCode.Q))
        {
            transform.Rotate(Vector3.up * Time.deltaTime * -45);
        }
        if (Input.GetKey(KeyCode.E))
        {
            transform.Rotate(Vector3.up * Time.deltaTime * 45);
        }
    }

这里一定要留意的是旋转时的坐标系:Vectory是世界坐标系,而transform是自身坐标

相机的抬头和低头:

    void Update () {
        Move();
	}
    private void Move()  //控制俯视和仰视
    {
        if (Input.GetKey(KeyCode.R)){
                transform.Rotate(Vector3.right * Time.deltaTime * -45); 
        }
        else if (Input.GetKey(KeyCode.F))
        {
            transform.Rotate(Vector3.right * Time.deltaTime * 45);
        }
    }
这就是最开始遇到的一个小问题,这里做个总结,希望能帮到大家!
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值