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坐标重合

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好,可以使用以下代码实现让一个物体的-X指向另一个物体: Vector3 direction = target.transform.position - transform.position; transform.rotation = Quaternion.LookRotation(-direction, Vector3.up); ### 回答2: 在Unity,我们可以通过编写脚本来使一个物体的-X指向另一个物体。首先,我们需要获取到物体的引用。 我们可以使用Transform组件来获取和操作物体的位置和旋转信息。为了使物体B的-X指向物体A,我们可以使用以下代码: ```csharp using UnityEngine; public class PointXAxisToObject : MonoBehaviour { public Transform targetObject; // 目标物体的引用 void Update() { if (targetObject != null) { Vector3 direction = targetObject.position - transform.position; direction.y = 0; // 保持在水平平面上 Quaternion rotation = Quaternion.LookRotation(-direction); transform.rotation = rotation; } } } ``` 在这个代码,我们在Update方法实时计算物体A指向物体B的旋转角度。首先,我们通过计算物体之间的方向向量,得出指向物体B的方向。然后,我们将该方向向量的Y分量设为0,即保持在水平平面上。 接下来,我们使用LookRotation方法将方向向量转换为旋转角度。由于我们希望物体A的-X指向物体B,所以需要将方向向量取反,即变为向量的反方向。最后,我们将计算出的旋转角度赋值给物体A的旋转。 在Unity编辑器,你可以将上述脚本添加到物体A上,并将物体B指定为目标物体。这样,每当物体B的位置发生变化时,物体A就会自动调整自身的旋转,使-X始终指向物体B。 ### 回答3: 在Unity,可以通过以下代码将一个物体的-X指向另一个物体: 1. 首先,你需要获取物体的引用。假设一个物体是"obj1",另一个物体是"obj2",你可以使用以下代码获取它们的引用: ```csharp GameObject obj1 = GameObject.Find("obj1"); GameObject obj2 = GameObject.Find("obj2"); ``` 确保在场景有名为"obj1"和"obj2"的游戏物体。 2. 接下来,你需要计算出一个指向目标物体的向量。可以使用以下代码: ```csharp Vector3 direction = obj2.transform.position - obj1.transform.position; ``` 这将给出一个从obj1指向obj2的向量。 3. 然后,你可以使用以下代码旋转obj1,使其-X指向obj2: ```csharp Quaternion targetRotation = Quaternion.LookRotation(-direction, Vector3.up); obj1.transform.rotation = targetRotation; ``` 上述代码将使用LookRotation函数计算出一个旋转的目标四元数,然后将该四元数分配给obj1的rotation属性,从而将obj1的-X指向obj2。 请注意,上述代码假设obj1和obj2已经添加了相应的组件(例如Transform组件)并在场景正确设置了位置。如果物体不在场景物体名字不正确,代码将无法正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值