【发布时间】:2018-10-29 07:41:04
【问题描述】:
我正在制作一个非随机生成的跑步游戏,我正在尝试编写老板进入和战斗的代码。所以游戏由一个一直停留在屏幕上的宇航员(玩家)组成(所以他,背景和相机永远不会移动,玩家可以移动但它被夹住了。
所有的危险都向玩家靠近,他必须避开它们或击败它们,直到最后一个危险是老板。老板在线的尽头,也沿着 z 轴向玩家移动,我希望它在与 Quad 碰撞时停止,所以老板是静止的,他们可以战斗。
之后,我希望老板上下移动并使用 Lerp 功能射击玩家。
代码如下所示:
public class BossController : MonoBehaviour {
public float speed;
public float health;
public Animator anim;
public Transform startMarker;
public Transform endMarker;
private Rigidbody rb;
private HUDController hud;
private bool startIntro = false;
private float startTime;
private float journeyLength;
void Start () {
startTime = Time.time;
journeyLength = Vector3.Distance (startMarker.position, endMarker.position);
anim = GetComponent<Animator> ();
rb = GetComponent<Rigidbody> ();
rb.velocity = transform.forward * -speed;
}
void Update(){
//transform.position += transform.forward * -speed * Time.deltaTime;
if (startIntro) {
rb.velocity = new Vector3(0,0,0);
Fight ();
}
}
void Fight(){
float distCovered = (Time.time - startTime) * speed;
float fracJourney = distCovered / journeyLength;
while(true)
{
transform.position = Vector3.Lerp(startMarker.position, endMarker.position, fracJourney);
transform.position = Vector3.Lerp(endMarker.position, startMarker.position, fracJourney);
}
}
void OnTriggerEnter(Collider other){
if (other.gameObject.CompareTag ("bossEntry")) {
startIntro = true;
//anim.SetTrigger ("quad");
}
}
}
我首先尝试了刚体,当它碰撞时,刚体的速度为 0,只要注释了 Fight() 方法,它就可以正常工作。所以也许是因为 lerp 函数?
当老板撞到对撞机时没有评论时,一切都冻结了,我不能再使用 Unity,我必须重新启动程序。
请帮忙!
编辑:我删除了 while(true) 循环,现在当老板与四边形碰撞而不是 lerping 时,它会直接倒下。 Boss 位于空对象下方,开始和结束标记也位于空对象下方。每个组件都附加到空对象(父对象)。
【问题讨论】:
-
顺便说一句我还没有实施拍摄
-
while(true)- 嗯,这是一个无限循环。您可能想要一种摆脱困境的方法。 -
是的,但我希望老板无休止地玩弄直到被打败
-
由于您在
Update()方法中调用Fight(),您可以在Fight()中删除while(true) -
每帧都会调用
Update()方法,所以Fight()也会每帧调用一次,因为它在Update()内部
标签: c# unity3d transform monodevelop rigid-bodies