当给一个目标点,如果目标直接去目标点我们可以直接让position指向目标点的position。
如果是转换输入呢?
举例:例如一个人物动画里有两个参数X和Y,X(- 1 ,1) 表示向左走和向右走,Y (-1 , 1) 向后和向前走。
如果我给一个目标点,如何计算应该给动画什么样的数值就可以呢。
其实很简单,我们首先计算目标点的向量。当自己人物有旋转的时候会发生变化。这时候可以使用 transform.InverseTransformDirection(dir)函数来将世界向量转成局部向量就可以了。
我们看看结果:
绿色球在前方的时候,计算出了 Z = 1
旋转自己后,目标改到前方,依旧是Z =1
测试代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestPoints : MonoBehaviour
{
public Transform target;
string showtxt;
GUIStyle fontStyle = new GUIStyle();
private void Awake()
{
fontStyle.normal.background = null; //设置背景填充
fontStyle.normal.textColor = new Color(1, 0, 0); //设置字体颜色
fontStyle.fontSize = 36; //字体大小
}
// Update is called once per frame
void Update()
{
Vector3 at = target.position;
at.y = transform.position.y;
Vector3 dir = (at - transform.position).normalized;
Debug.DrawRay(transform.position, dir, Color.red, 1f);
Vector3 moveInput = transform.InverseTransformDirection(dir);
showtxt = moveInput.ToString("F2");
}
void OnGUI()
{
GUI.Label(new Rect(200, 200, 680, 50), showtxt, fontStyle);
}
}
下面的GIF是转一周的Input数值变化。