unity中两物体之间的锚点-X,Y,Z轴始终处于平行和对齐状态
最近遇到一个问题是两个处于不同位置方向的物体怎样才能让他的锚点,也就是X,Y,Z轴始终处于平行状态。经过好几天的查阅资料发现了方法。如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour {
private Vector3 center;
private Vector3 forward;
private Vector3 right;
private Vector3 up;
public Vector3 Center
{
get { return transform.TransformPoint(center); }
// get { return transform.InverseTransformPoint(Center); }//.transform.InverseTransformPoint(v1);
}
/* public Vector3 Up
{
get { return transform.TransformPoint(up); }
}
public Vector3 Forward
{
get { return transform.TransformPoint(forward); }
}
public Vector3 Right
{
get { return transform.TransformPoint(right); }
}*/
private void CalculateCenter()
{
// Get the localspace center of the mesh bounds
center = GetComponent<MeshFilter>().sharedMesh.bounds.center; // .sharedMesh.bounds.center;
//center = GetComponent<Transform>().bounds.center;
//forward = GetComponent<Transform>().forward;//y
forward = GetComponent<Transform>().forward;//z
up = GetComponent<Transform>().up;//y
right = GetComponent<Transform>().right;//x
}
// Use this for initialization
void Start () {
Mesh sharedMesh = GetComponent<MeshFilter>().sharedMesh;
}
// Update is called once per frame
void Update () {
float speed = 500;
float step = speed * Time.deltaTime;
gameObject.transform.localPosition = Vector3.MoveTowards(gameObject.transform.localPosition, center, speed * Time.deltaTime);
CalculateCenter();
Debug.DrawLine(Center, transform.forward+ Center, Color.green);
Debug.DrawLine(Center, transform.up + Center, Color.green);
Debug.DrawLine(Center, transform.right + Center, Color.green);
Debug.DrawLine(center, transform.forward+center, Color.red);
Debug.DrawLine(center, transform.up+center, Color.red);
Debug.DrawLine(center, transform.right+center, Color.red);
}
}
此代码可以让物体的锚点与自己画出来的X,Y,Z坐标重合