【问题标题】:How to restart object position in Unity?如何在 Unity 中重新启动对象位置?
【发布时间】:2022-12-18 20:14:51
【问题描述】:

我在刷新对象位置时遇到问题,我想创建的条件非常简单。 如果游戏对象在 X 轴上移动得太远,则重新开始它在开始时的位置

我的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float playerSpeed = 5.0f;
    private Rigidbody playerRb;
    private Vector3 startPos;
    
    

    // Start is called before the first frame update
    void Start() 
    {
        playerRb = GetComponent<Rigidbody>();
        startPos = GameObject.Find("Player").transform.position;
    }
    
    void restartPlayerPosition() 
    {
        if(transform.position.x > 10 || transform.position.x < 10){ 
            this.transform.position = startPos;
    }

    }

    // Update is called once per frame
    void Update()
    {
        float horizontalnput = Input.GetAxis("Horizontal");
        float verticalInput = Input.GetAxis("Vertical");

        playerRb.AddForce(Vector3.forward * playerSpeed * verticalInput);
        playerRb.AddForce(Vector3.right * playerSpeed * horizontalnput);

        restartPlayerPosition();
    }

}

但是它不是来回移动,而是旋转,我不知道为什么。 我知道的是,当我在 start() 方法中调用 startPos 时发生了错误,它试图立即刷新位置,而不是先查看 if 语句条件。我想念什么吗?

我还尝试使用此方法查找对象的位置

gameObject.transform.position = sartPos

没有错误,但不会像我想要的那样工作

【问题讨论】:

  • if(transform.position.x > 10 || transform.position.x < 10) 条件看起来很奇怪。在这个条件下,回到原来位置的条件只有x = 10。这个条件看起来很奇怪。在这个条件下,回到原位的条件只有x = 10。而且运动是去AddForce的,所以即使回到原位也很有可能会出现奇怪的行为。我认为我们还需要有关它如何在游戏视图中移动的信息。

标签: c# unity3d


【解决方案1】:

我想你忘记了位置的负号为 -10 < x < 10。

在 restartPlayerPosition() 中将条件更改为这样。

if(transform.position.x > 10 || transform.position.x < -10)

而已。它会起作用。

【讨论】:

  • 谢谢它实际上有效,我只是没有太注意基本代数:(
【解决方案2】:

用这个改变你的 RestartPlayerPosition 方法:

void restartPlayerPosition() 
{
    if(transform.position.x > (startPos.x +10) || transform.position.x < (startPos.x - 10)
    { 
        this.transform.position = startPos;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 2021-07-21
    • 2011-02-12
    • 2021-04-19
    相关资源
    最近更新 更多