【问题标题】:Find a gameobject base on its transform in unity根据统一变换找到游戏对象
【发布时间】:2016-08-16 01:47:19
【问题描述】:

我有一个transform 并想找到具有transformgameObject

例如,我如何找到gameObject

Vector3 myTransform = new Vector3(33,12,0);

【问题讨论】:

  • Transform 不是Vector3。在Transform下有位置(Vector3)、比例(Vector3)和旋转(Quaternion)。你指的是哪一个?
  • transform.position
  • 您要查找的对象是否有对撞机,如果有的话有一个非常快速的方法可以使用Physics.OverlapShere 找到它,请参阅this question and answer over on the unity fourms

标签: c# unity3d


【解决方案1】:

获取场景中的所有变换,然后遍历所有变换,检查它们的 transform.position 是否等于您想要的:

Vector3 myVector = new Vector3(33,12,0);
Transform myTransform;
void start()
{
    Transform[] allTransforms = GameObject.FindObjectsOfType(typeof(Transform)) as Transform[];
    foreach (transform someTransform in allTransforms)
    {
        if(someTransform.position != myVector)
            continue;

        myTransform = someTransform;
        break;
    }
}

【讨论】:

  • 除非 Vector3 中有比较方法,否则将无法工作。
  • Transform.position返回一个Vector3,而myVector也是一个Vector3,当你在if语句中比较它们时,它只返回true,如果两者都是Vector3的是相同的。 @jdweng​​span>
  • 如果您最轻微地触摸vector3,浮点近似可能会稍微抵消它们。使用 Vector3.SqrMagnitude 可能会更好地处理一个已知的小 epsilon
【解决方案2】:

您可以创建一个实现的自定义类

using System;
using System.Globalization;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Vector3> vector3 = new List<Vector3>();
            Vector3 myTransform = new Vector3(33, 12, 0);
            vector3.Add(myTransform);

            Vector3 results = vector3.Find(x => x == myTransform);
        }
     }
    public class Vector3 : IEqualityComparer<Vector3>
    {
        public int x { get; set; }
        public int y { get; set; }
        public int z { get; set; }

        public Vector3(int x, int y, int z)
        {
            this.x = x;
            this.y = y;
            this.z = z;
        }
        public Boolean Equals(Vector3 a, Vector3 b)
        {
            return a == b;
        }
        public int GetHashCode(Vector3 vector3)
        {
            return (vector3.x.ToString() + "^" + vector3.y.ToString() + "^" + vector3.z.ToString()).GetHashCode();
        }


    }







}

我平等

【讨论】:

  • 哦,这是 Unity3D 的,这个功能是内置的。
猜你喜欢
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多