![](/img/trans.png)
[英]why wont "transform.position = new Vector3(x,y,z)" reset my object's position?
[英]Why is this transform.position reset between frames
所以,我的问题如下:
我正在开发一个非常简单的 2D 游戏,因为我对 Unity 还很陌生。 基本上,有一个骑士,有一个巨魔。 我正在为巨魔开发我的自定义 AI,但一开始就被难住了。 我试图让巨魔精灵正确旋转并走向玩家(在 Update() 中),但后来发现巨魔游戏对象的移动幅度不及百万分之一单位(尽管它正确旋转)!
现在,我的问题的特别之处在于:这不是关于使用 localPosition 而不是位置(巨魔没有父母 - 双关语),这不是关于通过“[SerializeField]”引用脚本中的转换,这不是关于处理静态对象或混乱的预制坐标或我在互联网上绝望的 10 小时搜索中发现的任何其他问题。 不,问题是我的代码中有巨魔变换,我成功修改了它,但随后它无法应用于游戏中的巨魔对象。 让它沉下去——我正确地修改了正确的变换(通过调试多次检查),但在下一帧的开始,所有的变化都神奇地恢复了,变换没有丝毫移动。
我已经对我的代码进行了近二十次修改以尝试使其工作(包括按照特定论坛主题中的建议将不同文件中的内容分开)但它只是没有,我想不出其他任何东西. 任何帮助都非常非常感谢。
public class EnemyController : MonoBehaviour
{
[SerializeField]
private Animator animator;
[SerialiseField]
private float walkingSpeed;
[SerializeField]
[Header("The aggro range of the enemy in Unity units.")]
private float aggroRange;
private float dir;
private Transform playerTransform;
void Update()
{
if (Aggro(playerTransform, aggroRange))
{
//WALKING:
WalkTowards(playerTransform, walkingSpeed);
}
}
private void WalkTowards(Transform targetTransform, float walkingSpeed)
{
animator.SetBool("IsRunning", false);
dir = 0.0f;
//Get the direction (left or right)
if (targetTransform.position.x < transform.position.x) //Left
{
dir = -1.0f;
//Flip the sprite to the left
transform.rotation = Quaternion.Euler(0.0f, 180.0f, 0.0f);
}
else //Right
{
dir = 1.0f;
//Flip the sprite to the right
transform.rotation = Quaternion.Euler(0.0f, 0.0f, 0.0f);
}
transform.position = new Vector3(
transform.position.x + (walkingSpeed * dir * Time.deltaTime),
transform.position.y,
transform.position.z
);
Debug.Log(
string.Format("Troll 1 position:\nx: {0:#.##}", transform.position.x) +
string.Format(" y: {0:#.##}", transform.position.y) +
string.Format(" z: {0:#.##}", transform.position.z)
);
}
}
(注意:Aggro() 是一种自定义方法,用于确定敌人的仇恨时间;未包含在代码中,因为它与问题无关)
所以基本上,transform.position 在脚本中被正确更改并保持这种状态直到方法结束,但在下一帧的开始 - 即当 WalkTowards() 再次被调用时,transform.position 保持不变是在最后一帧的开头——好像从未进行过计算或更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.