unity实现贪吃蛇游戏
程序员文章站
2023-09-06 17:12:12
unity贪吃蛇基本原理实现,供大家参考,具体内容如下原理:1、每个身体跟着前面的身体移动;2、蛇头自动一直向前走,可以向左或者向右转弯。思想:贪吃蛇的身体有若干个,每个身体有共同的特性,就是跟着前面...
unity贪吃蛇基本原理实现,供大家参考,具体内容如下
原理:
1、每个身体跟着前面的身体移动;
2、蛇头自动一直向前走,可以向左或者向右转弯。
思想:
贪吃蛇的身体有若干个,每个身体有共同的特性,就是跟着前面的身体移动,这里把蛇的身体抽象出出来,用一个snackbody类来表达,每一节身体都new出一个snackbody对象,然后操作这个对象实现功能;蛇头可以看做特殊的蛇身体。应该有一个管理器来管理所有的蛇身体,所以有个snackcontroller类来管理。每段蛇身都有front,self,oldpos三个属性。
using system.collections; using system.collections.generic; using unityengine; public class snackbody { public snackbody front; //表示 前一段蛇身 public transform self; //表示 当前蛇身 vector3 oldpos; //当前蛇身的前一个位置 public snackbody(snackbody tmpfront, transform tmpself) { front = tmpfront; self = tmpself; oldpos = tmpself.position; } //这一节蛇身已经向前移动了,更新oldpos public void reflash() { oldpos = this.self.position; } //跟着前面的蛇身 public void followfront() { self.position = front.oldpos; //更新蛇身的位置 front.reflash(); } public virtual void moveforward(){} } public class snackhead : snackbody { //继承基类 public snackhead(snackbody tmpfront,transform tmpself):base(tmpfront,tmpself) { } public override void moveforward() { self.translate(-self.forward, space.world); } /// <summary> /// 向右移动 /// </summary> public void turnright() { vector3 tmpangle = self.localeulerangles; tmpangle.y += 90; self.localeulerangles = tmpangle; } /// <summary> /// 向左移动 /// </summary> public void turnleft() { vector3 tmpangle = self.localeulerangles; tmpangle.y -= 90; self.localeulerangles = tmpangle; } }
using system.collections; using system.collections.generic; using unityengine; public class snackcontroller : monobehaviour { list<snackbody> allbodys; //存储所有的蛇身 public transform snackhead; public transform bodyone; public transform bodytwo; // use this for initialization void start () { allbodys = new list<snackbody>(); snackhead tmphead = new snackhead(null, snackhead); allbodys.add(tmphead); snackbody tmponebody = new snackbody(tmphead, bodyone); allbodys.add(tmponebody); snackbody tmptwobody = new snackbody(tmponebody, bodytwo); allbodys.add(tmptwobody); startcoroutine(movefront()); } ienumerator movefront() { while(true) //用一个死循环来让蛇一直移动 { allbodys[0].moveforward(); yield return new waitforseconds(0.5f); for(int i=1;i<allbodys.count; i++) { allbodys[i].followfront(); yield return new waitforseconds(0.2f); } } } // update is called once per frame void update () { if(input.getkeydown(keycode.a)) { ((snackhead)allbodys[0]).turnleft(); } if (input.getkeydown(keycode.d)) { ((snackhead)allbodys[0]).turnright(); } } }
更多有趣的经典小游戏实现专题,分享给大家:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。