简单的雷达2D

时间:2017-12-11 14:10:42

标签: c# unity3d

我有一个问题。对于一个简单的游戏,我需要一个简易的,简单的雷达。我到目前为止所做的一切都是你在图片中看到的。只有那条线被旋转。

radar

现在我想让那个蓝点在圆圈的某个地方显得随机,当雷达来到他面前时。

using EduUtils.Events;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class RadarScript : MonoBehaviour
{
   public GameObject radarLine;
   private Vector3 rotationEuler;

   void Start ()
   {

   }
   private void Update()
   {
       rotationEuler -= Vector3.forward * 50 * Time.deltaTime;
       radarLine.transform.rotation = Quaternion.Euler(rotationEuler);
   }

}

这个剧本只进行旋转,但是我试图想一想如何在旋转过程中使该点出现在雷达前面。???

1 个答案:

答案 0 :(得分:0)

当点进入雷达扇区时,您可以启用渲染器:

public class RadarScript : MonoBehaviour {

    public GameObject radarLine;
    private Vector3 rotationEuler;

    private void Update()
    {
        rotationEuler -= Vector3.forward * 50 * Time.deltaTime;
        radarLine.transform.rotation = Quaternion.Euler(rotationEuler);
        var sectorA = radarLine.transform.up;
        var sectorB = -radarLine.transform.right;
        var allDots = GetComponentsInChildren<RadarDot> ();
        foreach (var dot in allDots) {
            var a = Vector3.Dot (dot.transform.position, sectorA);
            var b = Vector3.Dot (dot.transform.position, sectorB);
            dot.GetComponent<Renderer> ().enabled = (a > 0 && b < 0);
        }
    }
}

这里的想法是使用点积符号来检查点是否位于两个扇形向量之间。示例中的RadarDot只是一个随机位置的精灵:

public class RadarDot : MonoBehaviour {

    // Use this for initialization
    void Start () {
        var randomPos = Random.insideUnitCircle;
        transform.position = new Vector3 (randomPos.x, randomPos.y);
        GetComponent<Renderer> ().enabled = false;

    }
}