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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity 3D 物体指示线是一种用于指示游戏场景中物体位置的工具。它通常表现为从游戏对象出发,指向其目标(另一个游戏对象或者空间坐标)。这个指示线在制作游戏时非常有用,因为游戏中有太多的元素需要定位和寻找。使用这个指示线可以帮助开发者更加方便地理解和调整游戏物体之间的距离和关系,同时可以高效地精细调整游戏中各个元素的参数。 Unity 3D 物体指示线可以通过许多方法实现,例如使用脚本编写代码、拖拽线框图等。它通常包含一个起点和一个终点,用不同颜色的线条显示。在实际使用中,开发者可以根据需要进行自定义调整,例如更改线条颜色、宽度、长度等。 总的来说,Unity 3D 物体指示线是一种非常实用的工具,可以帮助开发者更好地定位和调整游戏中的各个元素,提高游戏制作的效率和质量。 ### 回答2: Unity 3D物体指示线是一种在3D游戏或应用中方便用户进行操作的指示工具。该线通常用于标识物体之间的距离或方向,以便玩家或开发者更轻松地定位和交互不同的物体。 这些指示线可以根据需要定制,包括它们的颜色、厚度和透明度等属性。在游戏开发中,它们通常与其他UI元素一起使用,例如按钮或文本,以帮助玩家更高效地操作游戏。 另外,Unity 3D物体指示线还可用于展示物体之间的连接、路径或运动方向等信息。通过使用这种工具,游戏开发者可以为玩家提供更多的信息,从而提高游戏的可玩性和体验。 总之,Unity 3D物体指示线是游戏开发设计中不可或缺的一个工具,它可以帮助开发者节省时间和精力,同时也能提升玩家的游戏体验。 ### 回答3: Unity 3D物体指示线(Object Gizmos)是Unity编辑器中的一种工具,用于协助开发者对场景中的物体进行定位、旋转和缩放等操作。 在Unity编辑器中,选中一个物体后,可以在它的顶部看到一些小箭头和圆圈,这些就是物体指示线。小箭头代表物体的方向,可以通过拖动它们来旋转物体,圆圈则代表物体的缩放,可以通过拖动它们来改变物体的大小。 除了基本的旋转和缩放,Unity 3D物体指示线还支持一些高级功能,例如在物体上定义轴心点(Pivot),通过轴心点来进行旋转和缩放;以及在物体周围显示网格线(Wireframe)来更好地观察和调整物体的细节。 Unity 3D物体指示线是一个方便而实用的工具,让开发者可以在编辑器中快速地对场景中的物体进行操作和调整,提高了开发效率和开发体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值