Unity3D 物体运动小游戏后续

简介: 上篇链接:https://blog.csdn.net/qq_36171287/article/details/84144912目录上篇链接:https://blog.

上篇链接: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

目录
相关文章
|
6月前
|
图形学
【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)
【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)
176 0
|
图形学
Unity小游戏——迷你拼图
Unity小游戏——迷你拼图
255 1
|
图形学
Unity小游戏——使被砍中的怪物四处飞散
Unity小游戏——使被砍中的怪物四处飞散
|
图形学
unity小游戏——得分高低的判定
unity小游戏——得分高低的判定
|
机器学习/深度学习 算法 图形学
Unity小游戏——无限滚动的背景的改良
Unity小游戏——无限滚动的背景的改良
111 0
|
算法 图形学
Unity小游戏——武士击杀小怪兽(无限滚动的背景)
Unity小游戏——武士击杀小怪兽(无限滚动的背景)
|
7月前
|
图形学
【Unity3D开发小游戏】Unity3D零基础一步一步教你制作跑酷类游戏
【Unity3D开发小游戏】Unity3D零基础一步一步教你制作跑酷类游戏
|
图形学
Unity小游戏——武士和怪物的碰撞检测
Unity小游戏——武士和怪物的碰撞检测
|
图形学
Unity小游戏——怪物出现模式的管理
Unity小游戏——怪物出现模式的管理
128 0
|
图形学
Unity实现2D小游戏
Unity实现2D小游戏FirstGame2D(Sunny Land) 一、游戏说明 本游戏为作者的第一个实验的2D小游戏 实现效果: (1)简单的UI界面以及触发按钮、滑动按钮事件 (2)通过按钮与按键实现场景的切换 (3)通过代码实现动画效果的切换(跳跃、蹲下等) (4)碰撞体以及触发器实现消灭敌人、收集物品、地面检测 (5)相机场景与背景运动差,实现场景与人物的立体效果,达到较好的视觉效果 (6)SoundMananger实现场景音乐的管理
261 0
Unity实现2D小游戏