zoukankan      html  css  js  c++  java
  • Fire Balls 07——子弹的命中及后续效果

    版权申明:

    • 本文原创首发于以下网站:
    1. 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
    2. 优梦创客的官方博客:https://91make.top
    3. 优梦创客的游戏讲堂:https://91make.ke.qq.com
    4. 『优梦创客』的微信公众号:umaketop
    • 您可以自由转载,但必须加入完整的版权声明

    目标

    • 预制体Tag的更改
    • 子弹脚本的编写
    • 子弹碰到圆环后反弹

    预制体Tag的更改

    • 首先我们先打开我们的砖块(任意)预制体然后在上方找到Tag选项
    • 单击打开后点击Add Tag,点击+号,增加两个如下Tag
    • 由于我们的圆环是动态创建的所以我们需要在脚本中添加更改Tag的代码,首先我们先Disc脚本找到对应的函数并添加第23行代码如下所示:
    
    	private void CreateArch(int radius, int deg, int rot)
    	{
    		// 创建圆环
    		ProBuilderMesh pbMesh = ShapeGenerator.GenerateArch(PivotLocation.FirstVertex,
    			deg, radius, 0.5f, 1, 20, true, true, true, true, true);
    		pbMesh.GetComponent<MeshRenderer>().material = mat;
    
    		// 设置圆环的Tag
    		pbMesh.gameObject.tag = "Arch";
    
    		// 给圆环添加碰撞器
    		pbMesh.gameObject.AddComponent<MeshCollider>();
    
    		// 使圆环平躺
    		pbMesh.transform.Rotate(-90, 0, 0);
    
    		// 设置圆环的父节点,使其绕着父节点公转(父节点默认创建在原点)
    		Transform xRig = new GameObject("xRig").transform;
    		pbMesh.transform.SetParent(xRig, false);
    
    		// 设置圆环初始在圆盘的旋转角度
    		xRig.Rotate(0, rot, 0);
    		Transform yRig = new GameObject("yRig").transform;
    		xRig.SetParent(yRig, false);
    
    		yRig.SetParent(this.transform, false);
    	}
    }
    
    • 然后保存并关闭我们的脚本即可。
    • 由于我们的砖块是有预制体的,所以我们只需打开砖块的预制体然后把Tag改为Brick即可。

    子弹脚本的编写

    • 我们先新建一个脚本重命名为Porjectile并打开编写如下代码
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    // 子弹脚本
    public class Projectile : MonoBehaviour
    {
    	private void Start()
    	{
    	}
    
    	// 把子弹跟其他物体碰撞的脚本写在这里
    	private void OnCollisionEnter(Collision collision)
    	{
    		// 子弹跟谁发生了碰撞?
    		if (collision.gameObject.tag == "Arch")
    		{
    			print("你碰到了圆环!");
    		}
    		else if (collision.gameObject.tag == "Brick")
    		{
    			print("你碰到了砖块!");
    		}
    	}
    }
    
    • 并把脚本拖给子弹即可,由于子弹有可能会碰到平台,我们可以选中平台把平台的Mesh Colider组件给移除掉。注意,子弹上得添加Rigidbody和Sphere Colider组件,否则子弹不会产生碰撞效果。

    子弹碰到圆环后反弹

    • 首先我们需要联系优梦创客的助教Alice老师她为我们提供完成本节课任务所需要的插件,然后把插件导入至我们的Unity,并打开我们的Projectile预制体并添加Lober脚本,并把左上角的√给取消掉,如下所示

      然后重新打开我们的Projectile脚本并把代码修改为如下所示:
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    // 子弹脚本
    public class Projectile : MonoBehaviour
    {
    	private Lober lober;
    	private Transform ply;
    
    	private void Start()
    	{
    		lober = GetComponent<Lober>();
    
    		ply = GameObject.FindWithTag("Player").transform;
    	}
    
    	// 把子弹跟其他物体碰撞的脚本写在这里
    	private void OnCollisionEnter(Collision collision)
    	{
    		// 子弹跟谁发生了碰撞?
    		if (collision.gameObject.tag == "Arch")
    		{
    			print("你碰到了圆环!");
    
    			lober.endPos = ply.position;
    
    			lober.enabled = true;
    		}
    		else if (collision.gameObject.tag == "Brick")
    		{
    			print("你碰到了砖块!");
    		}
    	}
    }
    
  • 相关阅读:
    会议记录补充5月9日
    会议记录补充5月11日
    每日会议记录5月6日
    SQL Server 日期函数
    Jvascript运算符
    For循环
    JS数据类型
    初识Javascript
    检测浏览器版本(综合整理)
    自己实现一个数组的slice方法
  • 原文地址:https://www.cnblogs.com/raymondking123/p/11451123.html
Copyright © 2011-2022 走看看