项目中遇到需要角色在播动画的时候某几个指定骨骼指向目标的需求。
如果只是手的话可以做8方向动画再用动画插值,或者用IK功能。
因为我们的需求比较简单,只是指向(没有握住之类的),但是任何动画中的任意骨骼都有可能需要指向,所以做动画融合比较费劲,就想到直接控制骨骼朝向来实现。
Unity官方有一个Demo实现了用Animation Job来做的LookAt:
https://blogs.unity3d.com/cn/2018/08/27/animation-c-jobs/
于是我们把这个放到项目中用了一段时间,官方的例子中没有考虑根节点的偏移和旋转,这个可以处理,但是实测之后发现指向的并不精准,并且由于动画流内部的数据很难调试,导致修复问题比较困难,虽然Job System性能很高,但是在角色数量不多,骨骼数不多的情况下直接计算也是可以的,以下是修改的直接计算骨骼朝向的脚本:
using System;
using UnityEngine;
///<summary>
///朝向功能测试脚本
///</summary>
public class TestLookAt : MonoBehaviour
{
public enum Axis
{
Forward = 1,
Back,
Up,
Down,
Left,
Right
}
//关节
public Joints[] joints;
//目标
GameObject m_Target;
//创建指向
void CreateLookat()
{
if (joints == null || joints.Length ==