unity3d 如何在Unity中重新启动对象位置?

3lxsmp7m  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(230)

我在刷新对象位置时遇到了问题,我想做的条件很简单。如果游戏对象在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

没有错误,但不会像我希望的那样工作

wr98u20j

wr98u20j1#

我想你忘了位置-10〈x〈10的负号。
在restartPlayerPosition()中将条件更改为如下所示。

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

就是这样,会成功的

fcwjkofz

fcwjkofz2#

使用以下代码更改RestartPlayerPosition方法:

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

相关问题