本文共 4462 字,大约阅读时间需要 14 分钟。
目录
打开unity3d,然后打开playermove的C#脚本。
playermove的代码:
public class playermove : MonoBehaviour { public float moveSpeed; //移速 private float maxSpeed=15; //最高速度的限制 private Vector3 initialPosition; //定义初始位置 // Use this for initialization void Start () { initialPosition = transform.position; //一开始player的位置 } // Update is called once per frame void Update () { //获取键盘数值 //var 自动匹配目标类型 var move = new Vector3(Input.GetAxisRaw("Horizontal"),0,Input.GetAxisRaw("Vertical")); //构建一个向量,获取X,Y,Z三轴的变量 var rigidbody = GetComponent(); if (rigidbody.velocity.magnitude < maxSpeed) //移动向量的值小于最高移速限制 { rigidbody.AddForce(move * moveSpeed); //给刚体添加一个力 } if (transform.position.y<-2) //如果y轴的位置下降到-2 { transform.position = initialPosition; //player的位置返回初始位置 } }}
点击enemy,在Inspector中选择Tag(标签)--Add Tag(添加标签)
注意:需要player运动时碰撞才有效。
添加标签名为Enemy。 然后重新选择enemy元件,在Tag中会出现刚刚新加的标签。
player代码如下:
public class playermove : MonoBehaviour { public float moveSpeed; //移速 private float maxSpeed=15; //最高速度的限制 private Vector3 initialPosition; //定义初始位置 // Use this for initialization void Start () { initialPosition = transform.position; //一开始player的位置 } // Update is called once per frame void Update () { //获取键盘数值 //var 自动匹配目标类型 var move = new Vector3(Input.GetAxisRaw("Horizontal"),0,Input.GetAxisRaw("Vertical")); //构建一个向量,获取X,Y,Z三轴的变量 var rigidbody = GetComponent(); if (rigidbody.velocity.magnitude < maxSpeed) //移动向量的值小于最高移速限制 { rigidbody.AddForce(move * moveSpeed); //给刚体添加一个力 } if (transform.position.y<-2) //如果y轴的位置下降到-2 { die(); //player的位置返回初始位置 } } void OnCollisionStay(Collision other) { if (other.gameObject.tag== "Enemy") { die(); //player的位置返回初始位置 } } void die() { transform.position = initialPosition; //player的位置返回初始位置 }}
点击Open Editor,对粒子系统进行设置,将Looping的勾取消,再设置Start Size的大小范围。在project中新建一个文件夹Pretabs,然后在把Particle System移动到文件夹Pretabs当中。
之后可以将Particle System从Hierarchy中删除,点击player,将文件夹Pretabs中的Particle System移动到Playermove(Script)中的Death Effect后面的文本框中。然后运行即可。
player代码:
public class playermove : MonoBehaviour { public float moveSpeed; //移速 private float maxSpeed=15; //最高速度的限制 private Vector3 initialPosition; //定义初始位置 public GameObject deathEffect; //死亡特效 // Use this for initialization void Start () { initialPosition = transform.position; //一开始player的位置 } // Update is called once per frame void Update () { //获取键盘数值 //var 自动匹配目标类型 var move = new Vector3(Input.GetAxisRaw("Horizontal"),0,Input.GetAxisRaw("Vertical")); //构建一个向量,获取X,Y,Z三轴的变量 var rigidbody = GetComponent(); if (rigidbody.velocity.magnitude < maxSpeed) //移动向量的值小于最高移速限制 { rigidbody.AddForce(move * moveSpeed); //给刚体添加一个力 } if (transform.position.y<-2) //如果y轴的位置下降到-2 { die(); //player的位置返回初始位置 } } void OnCollisionStay(Collision other) { if (other.gameObject.tag== "Enemy") { die(); //player的位置返回初始位置 } } void die() { Instantiate(deathEffect,transform.position,Quaternion.identity); //死亡效果 transform.position = initialPosition; //player的位置返回初始位置 }}
创建一个新的方块Cube,重命名为Wall。新建一个空盒子,命名为Walls,把上面的wall元件都拖动到Walls中。
新建一个方块Goal,修改颜色,把方块拖动到你设置的目标到达位置。
新建一个脚本文件,命名为GameCenter.
之后将GameCenter的代码编辑如下:
public class GameCenter : MonoBehaviour { public static int currentLevel = 0; //默认设置关卡数为0 public static void CompleteLevel() //完成当前关卡 { Application.LoadLevel(currentLevel); } }
接下来需要在playermove脚本中考虑是否碰撞。在unity界面选择Goal元件,在Inspector中勾选触发器Is Trigger。
然后新增Goal元件的标签,将标签命名为Goal,修改Tag的值为Goal
然后在playermove脚本中添加一个新的方法。
void OnTriggerStay(Collider other) //碰撞判断 { if (other.gameObject.tag == "Goal") { GameCenter.currentLevel++; //GameCenter的currentLevel值自增 GameCenter.CompleteLevel(); //调用GameCenter的CompleteLevel()方法 } }
把场景加入, 选择File--Build Settings--Add Current
创建第二个场景,在Project中选择demo01,按CTRL+D,会自动拷贝一份demo01场景,命名为demo02。
可以对demo02进行场景元件位置的修改
同样将demo02加入
接下来运行时就成功了,自己可以对场景进行美化加工!
转载地址:http://cggix.baihongyu.com/