Unity3D 物体运动小游戏后续

上篇链接:https://blog.csdn.net/qq_36171287/article/details/84144912

目录

上篇链接:https://blog.csdn.net/qq_36171287/article/details/84144912

一、写入player方块的初始位置

二、设置敌人与player的碰撞检测

三、加入粒子系统

四、设置围墙

五、设置目标goal

参考实例: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加入

接下来运行时就成功了,自己可以对场景进行美化加工!

参考实例:https://download.csdn.net/download/qq_36171287/10806875

猜你喜欢

转载自blog.csdn.net/qq_36171287/article/details/84204039