我正在制作无尽的亚军游戏,但我遇到了问题。我需要我的角色从左到右移动,但不会这样做。 我需要它从左向右平滑移动,而不是在车道上移动。由于我的游戏将在整个路径中弹出随机对象。
我已经在Unity中将左右键辅助到了A和D。
是我的代码吗?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ballmove : MonoBehaviour {
public KeyCode moveL;
public KeyCode moveR;
public float horizVel = -4;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
GetComponent<Rigidbody>().velocity = new Vector3(-4, 0, 0);
if (Input.GetKeyDown(moveL))
{
horizVel = -5;
StartCoroutine(stopSlid());
}
if (Input.GetKeyDown(moveR))
{
horizVel = 5;
StartCoroutine(stopSlid());
}
}
IEnumerator stopSlid()
{
yield return new WaitForSeconds(1);
horizVel = -4;
}
}
答案 0 :(得分:0)
所以基本上我忘了分配horizVel,而且我还分配了向左移动的速度。我这样做可以解决问题:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ballmove : MonoBehaviour {
public KeyCode moveL;
public KeyCode moveR;
public float horizVel = 0;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
GetComponent<Rigidbody>().velocity = new Vector3(-4, GM.vertVol, horizVel);
if (Input.GetKeyDown(moveL))
{
horizVel = -3;
StartCoroutine(stopSlid());
}
if (Input.GetKeyDown(moveR))
{
horizVel = 3;
StartCoroutine(stopSlid());
}
}
IEnumerator stopSlid()
{
yield return new WaitForSeconds(0.5f);
horizVel = 0;
}
}
因此,此行GetComponent<Rigidbody>().velocity = new Vector3(-4, GM.vertVol, horizVel);
应该是GetComponent<Rigidbody>().velocity = new Vector3(-4, 0, horizVel);
,自修复以来,我还添加了一些内容。
答案 1 :(得分:0)
如果要更精确地控制对象的位置,可以使用移动位置代替速度。
// Update is called once per frame
void Update () {
var horizVel = 0;
if (Input.GetKey(moveL))
{
horizVel += 3;
}
if (Input.GetKey(moveR))
{
horizVel -= 3;
}
GetComponent<Rigidbody>().MovePosition(this.transform.position + new Vector3(-4, GM.vertVol, horizVel) * Time.deltaTime);
}
}