【发布时间】: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的,所以即使回到原位也很有可能会出现奇怪的行为。我认为我们还需要有关它如何在游戏视图中移动的信息。