![](/img/trans.png)
[英]Unity - Trying to move cube to mouse position - cube moves in wrong direction
[英]Unity: Setting Position Axist on gameobject in code moves it to wrong coordinates
我的游戏中有一朵乌云,从右向左移动。 在撞上撞机之前-刚好应该将这台撞机带回原来的状态。 因此,云在场景中不断循环。
我有两个问题:
对我而言,最佳方法是为云提供一个“扩展区”,在撞击重置对撞机后才在其中生成。 但是,我没有找到有关产卵区的任何信息。
因此,我决定仅在对撞机触发后更改代码中的位置值。 好吧,云被设置为一个不同的空间,而不是我给它的坐标。
在两个示例中,仅更改云的X位置很重要。 高度(Y)和深度(Z)应该保持相同。
这是我所达到的,并且无法达到预期的效果:
public class CloudScript : MonoBehaviour
{
public float moveSpeed;
void OnTriggerEnter2D(Collider2D collider)
{
if (collider.gameObject.name == "Reset Clouds Collider") // detect collision with ground game object
{
float tempY = transform.position.y;
float tempZ = transform.position.z;
transform.localPosition = new Vector3(5, tempY, tempZ);
}
}
// Update is called once per frame
void FixedUpdate()
{
transform.Translate(Vector3.left * moveSpeed * Time.deltaTime);
}
}
在此脚本中,我希望云保持其Y和Z位置,只是将X更改为5。但是,云在Y = 5时以及在转换程序转到Y = 4之后开始。 在另一个周期后,Y = 3。...Z也从1开始设置为0。
有人可以帮我吗? 不能那么努力:)
谢谢 :)
使用localPosition
,还必须从localPosition
获取临时值
float tempY = transform.localPosition.y;
float tempZ = transform.localPosition.z;
transform.localPosition = new Vector3(5, tempY, tempZ);
为了重置到初始位置,您还可以简单地将其存储,例如在Start
(取决于您的需要,也可以OnEnable
其设为OnEnable
或通过公共方法),例如
private Vector3 initPosition;
private void Start()
{
// store original position
initPosition = transform.localPosition;
}
而不是简单地重置为那个
void OnTriggerEnter2D(Collider2D collider)
{
// detect collision with ground game object
if (collider.gameObject.name == "Reset Clouds Collider")
{
// restore original position
transform.localPosition = initPosition;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.