代码之家  ›  专栏  ›  技术社区  ›  behzad

如何在unity 2d项目中查看(瞄准)预制件

  •  0
  • behzad  · 技术社区  · 7 年前

     Vector2 direction = target.position - transform.position;
     float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
     Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.forward);
     transform.rotation = Quaternion.Slerp(transform.rotation, rotation, 
                                           speed * Time.deltaTime);
    

    你知道吗?

    this is full code

    Here is what i want

    2 回复  |  直到 7 年前
        1
  •  0
  •   Pluto    7 年前


    每当你 Instantiate 目标,将其添加到列表中。我们就叫它吧 allTargets target 在那张单子上。

    public List<Transform> allTargets;
    
    void Start()
    {
        allTargets = new List<Transform>();
    }
    
    void Update () {
        Transform closestTarget = GetClosestTarget(allTargets);        
        Quaternion targetRotation = GetRotationTo(closestTarget);
        transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, speed * Time.deltaTime);
    }
    
    Quaternion GetRotationTo(Transform target)
    {
        Vector3 dir = target.position - transform.position;
        float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
        return Quaternion.AngleAxis(angle, Vector3.forward);
    }
    
    Transform GetClosestTarget(List<Transform> targets)
    {              
        Transform closest = null;
    
        float minDistance = float.MaxValue;
        foreach (var t in targets)
        {
            float distance = Vector2.Distance(t.position, transform.position);
            if(distance < minDistance)
            {
                minDistance = distance;
                closest = t;
            }
        }
        return closest;
    }
    
        2
  •  0
  •   Ehsan Mohammadi    7 年前

    我假设你能找到最近的游戏对象并设置它 target.position . 现在将脚本更改为:

    void Update () 
    {
        Vector2 direction = target.position - transform.position;
        float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
        Quaternion newQuaternion = Quaternion.Euler(new Vector3(0, 0, angle));
        transform.rotation = Quaternion.Slerp(transform.rotation, newQuaternion, speed * Time.deltaTime);
    }
    

    请注意: 你的游戏对象,瞄准预制,必须看右x轴时,在旋转 (0,0,0) (如图)

    enter image description here

    希望对你有帮助