我的场景中有一个球,我想以恒定的速度向前移动它,所以我为球编写了以下代码:
public float speed = 100f;
void FixedUpdate () {
//rb.AddRelativeForce(Vector3.forward * speed * Time.deltaTime);
transform.position += Vector3.forward * Time.deltaTime * speed;
//rb.AddForce(0, 0, speed *Time.deltaTime);
//rb.velocity = transform.forward * speed;
}
注意:我已经尝试了您在注释(// ...)中看到的所有代码
问题是球有时会自身破坏,有时速度会降低,或者当球与其他物体碰撞时,它会以怪异的动作前进和后退!
这是完整的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(AudioSource))]
public class PlayerMovement : MonoBehaviour {
public AudioSource audioSource1;
public AudioSource audioSource2;
public Transform BallDestroyEffect;
public ParticleSystem BallCollectEffect;
public ParticleSystem SpeedEffect;
public ParticleSystem FireWorksEffect;
public GameObject FloatingTextPrefab;
public GameObject ContinueButton;
public Rigidbody rb;
public float speed = 100f;
private int count;
public Text countText;
public Text winText;
bool gameStart;
private void Start()
{
BallCollectEffect.Stop();
FireWorksEffect.Stop();
ContinueButton.SetActive(false);
rb = GetComponent<Rigidbody>();
count = 0;
setcountText();
winText.text = "";
audioSource1 = GetComponent<AudioSource>();
audioSource2 = GetComponent<AudioSource>();
}
void FixedUpdate () {
//rb.AddRelativeForce(Vector3.forward * speed * Time.deltaTime);
//transform.position += Vector3.forward * Time.deltaTime * speed;
//rb.AddForce(0, 0, speed *Time.deltaTime);
//rb.velocity = transform.forward * speed;
rb.MovePosition(transform.position + transform.forward * speed);
}
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag ("Enemy"))
{
audioSource2.Play();
SpeedEffect.Stop();
rb.gameObject.SetActive(false);
Instantiate(BallDestroyEffect, transform.position, transform.rotation);
FindObjectOfType<GameManager>().EndGame();
}
if (collision.gameObject.CompareTag("End"))
{
ContinueButton.SetActive(true);
winText.text = "Level Completed!";
SpeedEffect.Stop();
FireWorksEffect.Play();
}
if(collision.gameObject.CompareTag("Glass"))
{
audioSource1.Play();
count = count + 3;
setcountText();
BallCollectEffect.Play();
if (FloatingTextPrefab)
{
ShowFloatingText();
}
}
}
void ShowFloatingText()
{
Instantiate(FloatingTextPrefab, transform.position, Quaternion.identity, transform);
}
void setcountText () {
countText.text = count.ToString();
}
}
您对此有何建议?
答案 0 :(得分:1)
Rigidbody.MovePosition()
如果要在每个FixedUpdate中连续移动刚体,则应使用此。
改为设置
export_config.yaml
,如果要将刚体从一个位置传送到另一个位置,而不会渲染中间位置。
请注意这两个句子的区别。