2017-12-11 1 views
0

私は質問があります。単純なゲームでは、私は即興の単純なレーダーが必要です。私が今までにやったことのすべては、あなたが写真で見るものです。その行だけが回転します。単純なレーダー2D

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); 
    } 

} 

このスクリプトは、回転のみになりますが、私はその点が回転中に、レーダーの前に現れるようにする方法を考えるようにしようとしている。???

+0

青い点がどこにあるかあなたが知っている、レーダーラインがどこにあるか、あなたは知っている - ので、青い点が表示されているかどうかを決定するとの問題は、正確に何であります? – PaulF

+0

最初は非アクティブで、レーダービームに入ったときのみ観測され、その位置が変わるたびに –

+0

????レーダービームに入っているかどうかを知ることが難しい場所 - 移動している場合でもレーダービームがどこにあるかを知っている - 私はあなたが両方を制御していると仮定します。 – PaulF

答えて

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); 
     } 
    } 
} 

をここでの考え方は、ドットが2つの部門のベクトルの間にあるかどうかを確認するために、ドット積の記号を使用することです。例の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; 

    } 
}