Unity 人物方向旋转详细讲解

人物的旋转有很多种

这里介绍旋转使用四元数的方法

Quaternion.LookRotation(Vector3 dir);
Quaternion.Lerp(Quaternion a, Quaternion b, float t);

一、在介绍之前我们需要理解Unity的向量也就是Vector3

首先我们创建一个Unity的脚本,将坐标系用Unity画出来如下

图中白球的位置为0,0,0坐标的原点
在这里插入图片描述
代码如下:

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

[ExecuteInEditMode]
public class DirTest : MonoBehaviour {
	
	// Update is called once per frame
	void Update () {
        for (int i = 0; i < 10; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                Debug.DrawLine(new Vector3 (0, i, j), new Vector3 (10, i, j), Color.red);
                Debug.DrawLine(new Vector3 (i, j, 0), new Vector3 (i, j, 10), Color.blue);
                Debug.DrawLine(new Vector3 (i, 0, j), new Vector3 (i, 10, j), Color.green);
            }
        }
    }
}

二、下面我们创建两个小球f1,f2

左边的为f2 右边的为f1

在这里插入图片描述

三、我们将小球坐标用白色直线画出来,两个小球之间用黑色线画出来,两个小球的向量用黄线表示

脚本中添加两个Transform p1 ,p2

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

[ExecuteInEditMode]
public class DirTest : MonoBehaviour {

    /// <summary>
    /// 
    /// </summary>
    public Transform p1;

    /// <summary>
    /// 
    /// </summary>
    public Transform p2;
    
	// Update is called once per frame
	void Update () {
        for (int i = 0; i < 10; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                Debug.DrawLine(new Vector3 (0, i, j), new Vector3 (10, i, j), Color.red);
                Debug.DrawLine(new Vector3 (i, j, 0), new Vector3 (i, j, 10), Color.blue);
                Debug.DrawLine(new Vector3 (i, 0, j), new Vector3 (i, 10, j), Color.green);
            }
        }

        Debug.DrawLine(Vector3.zero, p1.position);
        Debug.DrawLine(Vector3.zero, p2.position);
        Debug.DrawLine(p1.position,p2.position, Color.black);

        Vector3 dir = p1.position - p2.position;
        Debug.DrawLine(Vector3.zero,dir, Color.black);

        Debug.DrawLine(Vector3.zero,dir, Color.yellow);
    }
}

效果如下:

这里我们发现黑线和黄线的方向大小都是一致的只是位置不同而已
在这里插入图片描述

接下来我们需要做的就是创建一个物体将物体旋转到黄线的方向

这个黄线是有方向的:(0,0,0)到黄线的末端就是向量的方向

因为旋转不需要考虑向量的大小与坐标的y值所以这里我把黄线改为单位向量并将y改为0配置如下所示

在这里插入图片描述

所以旋转时,这根白线的单位向量就是我们物体的朝向方向

创建旋转的物体
在这里插入图片描述

代码如下:

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

[ExecuteInEditMode]
public class DirTest : MonoBehaviour {

    /// <summary>
    /// 
    /// </summary>
    public Transform p1;

    /// <summary>
    /// 
    /// </summary>
    public Transform p2;

    /// <summary>
    /// 物体
    /// </summary>
    public Transform p3;
	
	// Update is called once per frame
	void Update () {
        for (int i = 0; i < 10; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                Debug.DrawLine(new Vector3 (0, i, j), new Vector3 (10, i, j), Color.red);
                Debug.DrawLine(new Vector3 (i, j, 0), new Vector3 (i, j, 10), Color.blue);
                Debug.DrawLine(new Vector3 (i, 0, j), new Vector3 (i, 10, j), Color.green);
            }
        }

        Debug.DrawLine(Vector3.zero, p1.position);
        Debug.DrawLine(Vector3.zero, p2.position);
        Debug.DrawLine(p1.position,p2.position, Color.black);

        Vector3 dir = p1.position - p2.position;
        dir.y = 0;
        Debug.DrawLine(Vector3.zero,dir, Color.black);
        Debug.DrawLine(Vector3.zero,dir, Color.yellow);
        Debug.DrawLine(Vector3.zero,dir.normalized, Color.white);


        p3.rotation = Quaternion.Lerp(p3.rotation,Quaternion.LookRotation(dir.normalized),Time.deltaTime * 3f);
    }
}

此时运行场景无论该物体的旋转是多少都无所谓最后都会缓慢的转向白线的方向

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Unity是一种流行的游戏引擎,它允许开发者轻松创建2D和3D游戏。Unity提供了丰富的工具和功能,以帮助开发者在游戏中实现各种动画效果,包括沿特定方向旋转。 要在Unity中实现沿方向旋转,首先需要有一个游戏对象,这个游戏对象可以是角色、物体或任何需要旋转的对象。接下来,需要编写一段脚本来控制旋转。 在脚本中,可以使用Unity的内置函数来实现旋转。例如,可以使用Transform组件的Rotate函数来旋转游戏对象。Rotate函数接受一个Vector3类型的参数,该参数表示旋转方向和角度。 在脚本中,可以定义一个Vector3变量来表示旋转方向。可以使用Vector3.right、Vector3.left、Vector3.up、Vector3.down、Vector3.forward或Vector3.back等预定义的向量来表示不同的方向。然后,将该方向向量作为参数传递给Rotate函数,即可实现沿该方向旋转。 将脚本应用到游戏对象后,游戏对象将按照脚本中定义的方向进行旋转。可以调整角度以控制旋转的速度和幅度。可以通过编辑脚本中的参数或在编辑器中操作对象的旋转轴来调整旋转效果。 总之,Unity可以通过编写脚本来实现沿特定方向旋转的效果。通过使用Transform组件的Rotate函数和定义旋转方向向量,可以在游戏中实现各种旋转效果。这种灵活性使得Unity成为开发者们创建精彩游戏动画的理想工具。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

类人_猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值