看我的场景中有玩家和敌人。我正在使用vector2.movetowards将敌人移向我的玩家,但是我的敌人是预制的,所以我必须给它一个我在检查器中的玩家的参考作为目标,但是当我从场景中删除敌人时,因为它是预制的,所以删除了播放器的引用我在这里应该做的是我的代码,谢谢,我只想知道如何在预制件中永久存储该目标的引用
using UnityEngine;
using System.Collections;
public class moveTowards : MonoBehaviour
{
public Transform target;
public float speed;
void Update()
{
float step = speed * Time.deltaTime;
transform.position = Vector2.MoveTowards(transform.position, target.position, step);
}
}
答案 0 :(得分:2)
您有几种方法可以做到这一点,但是典型的方法是找到玩家对象,然后存储目标位置,您可以像这样:
using UnityEngine;
using System.Collections;
public class moveTowards : MonoBehaviour
{
public Transform target; //now you can make this variable private!
public float speed;
//You can call this on Start, or Awake also, but remember to do the singleton player assignation before you call that function!
void OnEnable()
{
//Way 1 -> Less optimal
target = GameObject.Find("PlayerObjectName").transform;
//Way 2 -> Not the best, you need to add a Tag to your player, let's guess that the Tag is called "Player"
target = GameObject.FindGameObjectWithTag("Player").transform;
//Way 3 -> My favourite, you need to update your Player prefab (I attached the changes below)
target = Player.s_Singleton.gameObject.transform;
}
void Update()
{
float step = speed * Time.deltaTime;
transform.position = Vector2.MoveTowards(transform.position, target.position, step);
}
}
对于方法3,您需要在播放器上实现singleton pattern,它看起来应该像这样:
public class Player : MonoBehaviour
{
static public Player s_Singleton;
private void Awake(){
s_Singleton = this; //There are better ways to implement the singleton pattern, but there is not the point of your question
}
}