0

我想做的是产生一个敌人并在小地图上为产生的敌人创建一个标记/光点。我在 BlipCtrl:29 行收到 NullReferenceException。

Minimap 上的 Blip 有一个 Target GameObject,其位置反映了 Blip 在 Minimap 上的位置。当一个 Enemy 被实例化时,我将它设置为具有唯一的名称。我在编写一个函数时遇到问题,该函数将 Blip 的目标设置为具有唯一名称的 GameObject,Blip 从中获取它的位置和旋转。

生成器.js

public var enemy : Rigidbody ;
private var spawnValues : Vector3 = Vector3(50, 1, 50);
public var enemycount : int ;
public var enemyId : int;
static var enemiesarray = new Array();
public var blipcontroller : BlipCtrl; 

var spawnPosition : Vector3;
var spawnRotation : Quaternion;


function Start () {
var blipcontroller = GetComponent("BlipCtrl");
    SpawnWaves();


}

function SetName () {
    enemy.name = "Enemy#" + enemyId++;
}

function SpawnWaves() {
    for(var i = 0; i < enemycount; i++) {
        var spawnPosition : Vector3 = new Vector3(Random.Range(-50, 50), spawnValues.y ,Random.Range (-50, 50));
        var spawnRotation : Quaternion = Quaternion.identity;
        SetName();
        Instantiate(enemy, spawnPosition, spawnRotation);
        enemiesarray.Push(this.enemy);
        blipcontroller.CreateBlip(enemy, spawnPosition, spawnRotation);
    }
}

BlipCtrl.js

public var EnemyBlipImage : Rigidbody;
public var bliparray = new Array();
public var blipID : int;
public var map : Minimap;
private var blipTarget : Blip;
 private var gameobject : GameObject;
 static var target : Transform;
 var newBlip : GameObject;

function Awake () {
blipTarget = GetComponent(Blip);
map = GetComponent(Minimap);

}

function SetName() {
EnemyBlipImage.name = "EnemyBlip#" + blipID++;

}


function CreateBlip(object, objectName, position , rotation) {
SetName();
var newBlip = Instantiate(EnemyBlipImage, position, rotation);
newBlip.transform.SetParent(map.transform);
newBlip.gameObject.tag = "Enemy" ;
gameobject = GameObject.Find(objectName + "(Clone)");
blipTarget.target = gameobject.transform;
blipTarget.SetTarget(gameobject);
}

Blip.js

   #pragma strict
 public var target : Transform ;
 public var keepInBounds = true;
 public var LockScale = false;
 public var LockRotation = false;
 private var map : Minimap ;
 private var myRectTransform : RectTransform ;

 //set target to gameobject
function SetTarget(gameobject) {
 target = gameobject;
}

function Start () {
    map = GetComponentInParent(Minimap);
    myRectTransform = GetComponent(RectTransform);

}

function Update () {

}

function LateUpdate() {
    var newPosition : Vector3 = map.TransformPosition(target.position);

    if(keepInBounds) {
    newPosition = map.MoveInside(newPosition);
    }

    if(!LockScale) {
     myRectTransform.localScale = new Vector3(map.zoomLevel, map.zoomLevel, 1);         
    }
    if(!LockRotation) {
    myRectTransform.localEulerAngles = map.TransformRotation(target.eulerAngles);
    }

    myRectTransform.localPosition = newPosition;

}
4

0 回答 0