我正在尝试从坏人中实例化一个预制件,一个火球,并在实例化时将当前玩家位置传递给火球并使用它来定位玩家的火球。火球在其transform.forward向量上翻译/向前移动。因此,火球在创建火球时应该从坏人前往玩家的位置。
我发现的是方向正在设定(通过火球上的transform.lookat()
功能),但它几乎总是错误的方向。它不是90或180。关闭多少取决于玩家在坏人方面的位置。图案围绕z轴对称。
假设baddie位于(0,0,0):
当玩家在这些角度移动时,这些值会平稳移动。它只会朝着一个方向击中玩家。
我尝试了以下(其中一些可能不是必需的):
lookat
变量设置为:
player.transform.position - baddie.transform.position
baddie.transform.position - player.transform.position
这些都会产生相同的结果。
这是我的代码。
从baddie实例化火球的代码。
public class Baddie : MonoBehaviour {
public GameObject fireballPrefab;
public GameObject playerGameObject;
public float countDownForFireball;
private float currentCountDownForFireball;
void Start () {
playerGameObject = GameObject.FindGameObjectWithTag("Player");
currentCountDownForFireball = 0;
}
void Update () {
if(currentCountDownForFireball <= 0)
{
GameObject newFireball = GameObject.Instantiate(fireballPrefab, transform.position, Quaternion.identity);
newFireball.GetComponent<Fireball>().SetTarget(playerGameObject.transform.position);
currentCountDownForFireball = countDownForFireball;
}
else
{
currentCountDownForFireball -= Time.deltaTime;
}
}
}
火球上的代码
public class Fireball : MonoBehaviour {
private float moveSpeed;
private Vector3 target;
// Use this for initialization
void Start () {
moveSpeed = 15f;
}
// Update is called once per frame
void Update (){
transform.Translate(transform.forward * Time.deltaTime * moveSpeed);
}
public void SetTarget(Vector3 newTarget){
target = newTarget;
transform.LookAt(target);
}
}
答案 0 :(得分:0)
错误在Transform.Translate
的使用中。其辅助参数是Space
参数,默认为Space.Self
。您希望方向的空间与您正在翻译的空间相匹配,以便传入Space.World
:
// transform.forward is the transform's forward vector in "world space"
transform.Translate(transform.forward * Time.deltaTime * moveSpeed, Space.World);
或者,您可以继续使用默认Space.Self
与Vector3.forward
而不是transform.forward
:
// Vector3.forward is (0,0,1). In "self space" this is "forward"
transform.Translate(Vector3.forward * Time.deltaTime * moveSpeed); // Space.Self