[英]transform.lookat behaving weirdly OR I am missing something (unity3d c#)
我正在尝试从坏家伙实例化一个预制的火球,并在实例化时将当前玩家位置传递到火球,并使用该位置将火球瞄准玩家。 火球在其transform.forward向量上平移/向前移动。 因此,在创建火球时,火球应从坏蛋朝向玩家的位置前进。
我发现的是方向已设置(通过火球上的transform.lookat()
函数),但这几乎总是错误的方向。 它不是90或180折。 多少钱取决于玩家相对于坏蛋的位置。 图案围绕z轴对称。
假设坏蛋位于(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);
}
}
错误在于使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.