上篇链接:https://blog.csdn.net/qq_36171287/article/details/84144912
目录
上篇链接:https://blog.csdn.net/qq_36171287/article/details/84144912
参考实例:https://download.csdn.net/download/qq_36171287/10806875
一、写入player方块的初始位置
打开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<Rigidbody>();
if (rigidbody.velocity.magnitude < maxSpeed) //移动向量的值小于最高移速限制
{
rigidbody.AddForce(move * moveSpeed); //给刚体添加一个力
}
if (transform.position.y<-2) //如果y轴的位置下降到-2
{
transform.position = initialPosition; //player的位置返回初始位置
}
}
}
二、设置敌人与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<Rigidbody>();
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<Rigidbody>();
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
新建一个方块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加入
接下来运行时就成功了,自己可以对场景进行美化加工!