我想做的是产生一个敌人并在小地图上为产生的敌人创建一个标记/光点。我在 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;
}