Layabox获取角色的朝向,以及根据朝向修改角色朝向

如何获取角色的正确朝向?

首先,你要确定从unity里面导出的时候,角色默认朝向的方向。一般都是将角色朝向z轴正方向,那么,你导出放到layabox里面,角色也是默认朝向z轴正方向的。
在layabox中,你可以调用transform.getForward(forward)方法,传入一个Vector3来接收朝向。但是,接收的这个朝向默认角色z轴负方向的朝向。所以,我们需要将这个法向量,转成z轴正方向的法向,才实现了,和角色的朝向同步。
实现这一步,很简单,只需要将法向的x轴和z轴的值转为负值即可实现。

        const forward = new Laya.Vector3();
        actor.actorView.transform.getForward(forward);
        forward.x *= -1;
        forward.z *= -1;

        Laya.Vector3.normalize(forward, forward);

获取角色和指定方向的偏移

其次,我们还有需求,就是,有一个目标,我们可以通过角色位置和目标位置获取到一个向量,然后,通过求点积,获取到角色正法向和这个向量的夹角(角色默认垂直与地面,所以,位置向量,我们也默认平行于地面)

        //获取到移动方向
        const moveNor = new Laya.Vector3(1, 0, 0);
        //获取当前朝向和移动方向的夹角
        const value = Laya.Vector3.dot(moveNor, forward);
        //求出角度
        const deltaAng = (Math.acos(value) * 180) / Math.PI;

你求出了角度,但是,你根本无法知道这个需要往哪个方向偏移,我们就需要求叉积,求出的叉积的y的值,如果为负值,那么就向顺时针偏移,反之,则往逆时针偏移。接着,我们将值给角色使用即可。

        const out = new Laya.Vector3();
        Laya.Vector3.cross(forward, moveNor, out);
        if (out.y < 0) deltaAng = -deltaAng;
        sprite.transform.rotate(new Laya.Vector3(0, deltaAng, 0), true, false);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值