如何让玩家上下弹跳
本文关键字:上下 玩家 | 更新日期: 2023-09-27 18:35:14
我正在制作一个非常简单的安卓游戏,但我是编码新手。我希望我的播放器在屏幕上不断上下移动,但不能让它变得文字。
public class DuckBehaviour : MonoBehaviour {
Vector3 velocity = Vector3.zero;
float speed = 1f;
float verticality;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (transform.position.y < Screen.height -10) {
velocity.y = 0.7f;
} else if (transform.position.y > 10) {
velocity.y = -0.7f;
}
transform.position += velocity * Time.deltaTime;
}
}
代码似乎有两个问题。首先,如果游戏对象在屏幕上而不是屏幕外启动,则其速度将保持在 Vector2.0。第二个问题是 Screen.height 以像素为单位,但转换是以 Unity 的单位为单位的。希望这有帮助。
public class DuckBehaviour : MonoBehaviour {
Vector3 velocity = Vector3.zero;
float speed = 1f;
float verticality;
// Use this for initialization
void Start () {
velocity.y = 0.7f;
}
// Update is called once per frame
void Update () {
//Requires that an orthographic camera named "MainCamera" exists with y transform of 0
if (transform.position.y < -Camera.main.orthographicSize) {
velocity.y = 0.7f;
} else if (transform.position.y > Camera.main.orthographicSize) {
velocity.y = -0.7f;
}
transform.position += velocity * Time.deltaTime;
}
}
你可以尝试这样的东西(取自Unity论坛 - 见这里。请注意,代码实际上并未经过测试:)
public class DuckBehaviour : MonoBehaviour {
float speed = 1f;
float verticality;
Vector3 pointB;
IEnumerator Start () {
Vector3 pointA = transform.position;
while (true) {
yield return StartCoroutine(MoveObject(transform, pointA, pointB, 3.0));
yield return StartCoroutine(MoveObject(transform, pointB, pointA, 3.0));
}
}
IEnumerator MoveObject (Transform thisTransform, Vector3 startPos, Vector3 endPos, float time) {
float i = 0.0f;
float rate = 1.0f / time;
while (i < 1.0f) {
i += Time.deltaTime * rate;
thisTransform.position = Vector3.Lerp(startPos, endPos, i);
yield return null;
}
}
}
C# 要求您使用 StartCoroutines 方法,并且要用作协程的任何方法都必须返回 IEnumerator。本页介绍协程的工作原理。