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月前
|
图形学
Unity射线检测的避坑指南
Unity射线检测的避坑指南
|
9月前
|
人工智能
像相机一样变焦、填充画面细节,还能自定义风格,AI作画神器Midjourney又更新了
像相机一样变焦、填充画面细节,还能自定义风格,AI作画神器Midjourney又更新了
147 1
|
10月前
|
图形学
【unity每日一记】--控制游戏人物移动的细节
【unity每日一记】--控制游戏人物移动的细节
150 0
|
11月前
|
Java
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏05图像仿射变换(平移和缩放操作)
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏05图像仿射变换(平移和缩放操作)
111 0
|
11月前
|
Python
Python实现超级玛丽游戏系列教程04背景滚动及摄像机(Camera)原理
Python实现超级玛丽游戏系列教程04背景滚动及摄像机(Camera)原理
82 0
|
存储 传感器 C#
从零开始做一款Unity3D游戏<二>——移动,相机控制与碰撞(一)
从零开始做一款Unity3D游戏<二>——移动,相机控制与碰撞
从零开始做一款Unity3D游戏<二>——移动,相机控制与碰撞(一)
|
存储 安全 C#
从零开始做一款Unity3D游戏<二>——移动,相机控制与碰撞(二)
从零开始做一款Unity3D游戏<二>——移动,相机控制与碰撞
从零开始做一款Unity3D游戏<二>——移动,相机控制与碰撞(二)
|
iOS开发 MacOS Windows
Unity2D像素游戏开发——Aseprite简单人物绘画+动画制作导出精灵表示例
Unity2D像素游戏开发——Aseprite简单人物绘画+动画制作导出精灵表示例
508 0
Unity2D像素游戏开发——Aseprite简单人物绘画+动画制作导出精灵表示例
|
图形学
Unity 捏脸整理及基于骨骼的捏脸功能实现
目前实现捏脸功能的方式主要有两种。一个是Blendshape(融合变形),一个是基于骨骼驱动的方式,通过修改骨骼矩阵(bindpose)来影响SkinMesh。这两种方式的最终原理都是在shader 生效之前修改顶点。
4073 0