我是团结的新手,并且不了解很多东西。我一直在看教程,我看到其中一个人制作了着名的“Chilly Snow'”的复制品。游戏已经完成但是球的运动并不像寒冷的雪中那样。当我按下鼠标按钮时,球开始连续旋转。我想知道如何创造这种运动,以便球在曲线中左右转动,但不会进入轨道。我google了很多但是找不到我要求的结果。如果有人能指出我正确的方向,我真的很感激。图片已附上。Chilly Snow | Movement of my ball
public class movement : MonoBehaviour {
private float points;
public float playerSpeed;
private float rotationSpeed;
public Text score;
private bool isMovingLeft;
public GameObject player;
public bool isDead;
void Start () {
Time.timeScale = 0;
isDead = false;
isMovingLeft = true;
points = 0;
}
void Update ()
{
if (isDead == false)
{
points += Time.deltaTime;
}
transform.Translate (Vector3.down * playerSpeed * Time.deltaTime);
if (Input.GetMouseButtonDown (0))
{
Time.timeScale = 1;
isMovingLeft = !isMovingLeft;
rotationSpeed += 0.5f * Time.deltaTime;
}
if (Input.GetMouseButton (0))
{
rotationSpeed = 1f;
}
if (isMovingLeft) {
rotationSpeed += 1.5f * Time.deltaTime;
transform.Rotate(0,0,rotationSpeed);
} else
transform.Rotate(0,0, - rotationSpeed);
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "Obstacle") {
Die ();
}
}
public void Die()
{
playerSpeed = 0f;
isDead = true;
Invoke ("Restart", 2f);
}
void Restart(){
SceneManager.LoadScene ("Ski_scene_1");
}
void FixedUpdate()
{
score.GetComponent<Text>().text = points.ToString("0");
}
}
答案 0 :(得分:1)
以下是我如何在不轮换的情况下使用您的代码来接近它。
public class movement : MonoBehaviour {
private float points;
public Text score;
public GameObject player;
public bool isDead;
private float currentXSpeed;
private float targetSpeed;
public float maxXSpeed;
public float speedChange;
void Start () {
Time.timeScale = 0;
isDead = false;
isMovingLeft = true;
points = 0;
targetSpeed = maxXSpeed;
}
void Update ()
{
if (isDead == false)
{
points += Time.deltaTime;
}
if(Input.GetMouseButtonDown(0))
{
Time.timeScale = 1;
targetSpeed = -targetSpeed;
}
currentSpeed = mathf.MoveTowards(currentSpeed, targetSpeed, speedChange * Time.deltaTime);
Vector3 movementDirection = new Vector3(currentSpeed, Vector3.down.y * playerSpeed, 0.0f);
transform.Translate (movementDirection * Time.deltaTime);
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "Obstacle") {
Die ();
}
}
public void Die()
{
playerSpeed = 0f;
isDead = true;
Invoke ("Restart", 2f);
}
void Restart(){
SceneManager.LoadScene ("Ski_scene_1");
}
void FixedUpdate()
{
score.GetComponent<Text>().text = points.ToString("0");
}
}
答案 1 :(得分:0)
你需要像正弦运动或你喜欢的任何其他图形。
一个例子就是这样;
gameObject.transform.Translate(Vector3.right * Time.deltaTime*cubeSpeed);
gameObject.transform.position += transform.up * Mathf.Sin (Time.fixedTime * 3.0f ) * 0.1f;
以上伪是用于2D图形模拟,可以根据您的情况进行调整。
物体始终向右移动并在进行正弦运动时上下移动。因为上下速度不固定,所以你得到正弦或就像正弦运动。
在你的情况下,当对象总是向下时,它将使正弦向左和向右移动。
您的移动基于旋转,因此,如果您将此正弦速度作为旋转速度,则可以实现此目的。
另一个方法可以是 lerp 或 slerp
Lerp允许您在两个向量之间进行平滑的交易。
喜欢在X秒内从pointA移动到pointB。
要进行轮换,您需要Quaternion.Lerp
Unity Answers上有一个很好的答案,如果您之前没有,可以检查一下。
希望这有帮助!干杯!