T05_unityAI跳跃球 c#

首先创建一个3D项目,并给项目起一个名字

T05_unityAI跳跃球 c#_第1张图片

首先创建一个地面,起名为Ground,并修改其大小

T05_unityAI跳跃球 c#_第2张图片

创建一个材质文件包T05_unityAI跳跃球 c#_第3张图片 创建一个颜色材质

T05_unityAI跳跃球 c#_第4张图片

起名为Ground,拖动拽入场景 

T05_unityAI跳跃球 c#_第5张图片

可以调制材质棋盘格

T05_unityAI跳跃球 c#_第6张图片

调至100*100格子

T05_unityAI跳跃球 c#_第7张图片 

 接下来创建一个3D小球

T05_unityAI跳跃球 c#_第8张图片

resset下让小球放置场景正中心

T05_unityAI跳跃球 c#_第9张图片 

接下来我们创建几个材质做备用,分别是red,orange,yellow,green,blue

T05_unityAI跳跃球 c#_第10张图片 将小球y轴调至0.5使小球在地面上

T05_unityAI跳跃球 c#_第11张图片 除了小球身上的碰撞器以外

T05_unityAI跳跃球 c#_第12张图片

还要在小球身上添加刚体

T05_unityAI跳跃球 c#_第13张图片 

T05_unityAI跳跃球 c#_第14张图片 

 如果没有导航组件可以

T05_unityAI跳跃球 c#_第15张图片

T05_unityAI跳跃球 c#_第16张图片 

T05_unityAI跳跃球 c#_第17张图片 

导入即可

接下来给小球添加导航组件(给小球添加导航组件后小球就可以通过导航寻路走路)

T05_unityAI跳跃球 c#_第18张图片 

 接下来我们调整视角 准备做障碍物

T05_unityAI跳跃球 c#_第19张图片

首先创建一个3Dcube 

 T05_unityAI跳跃球 c#_第20张图片

 修改他的参数作为墙起名wallLeft

 T05_unityAI跳跃球 c#_第21张图片

ctrl + d 复制 起名WallLeft

 

 创建一个空物体,以此类推创建一个组合放进空物体里

T05_unityAI跳跃球 c#_第22张图片

ctrl + d 复制 一份组合空物体

T05_unityAI跳跃球 c#_第23张图片 

小球跳的原理:跳的时候,关闭导航组件,不跳的时候,开启导航组件

 接下来创建一个脚本文件夹

T05_unityAI跳跃球 c#_第24张图片

 创建一个c#脚本起名 JumpTest

T05_unityAI跳跃球 c#_第25张图片

将脚本绑定小球

T05_unityAI跳跃球 c#_第26张图片 打开进入c#脚本将一下代码复制

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class JumpTest : MonoBehaviour
{
    //实验需求:按空格键,小球向前跳跃
    [SerializeField]
    private float jumpForce = 20f;    //力
    private NavMeshAgent agent = null;    //导航组件
    private Rigidbody rb = null;   //刚体组件引用
    private bool isJumping;
    private void Start()
    {
        agent = GetComponent();
        rb = GetComponent();
    }
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            if (!isJumping)  //isJumping == false
            {
                isJumping = true;
                agent.enabled = false;   //关闭导航组件
                rb.AddForce(Vector3.up * jumpForce * Time.deltaTime, ForceMode.Impulse);

            }
        }if (transform.position.y > 3f)
        {
            rb.AddForce(Vector3.forward * 500 * Time.deltaTime, ForceMode.Force);
        }
        //说明小球已经落地了
        if (isJumping && rb.velocity.y == 0)
        {
            isJumping = false;
            agent.enabled = true;
        }
    }
}

再创建一个c#脚本起名为 AI

T05_unityAI跳跃球 c#_第27张图片

 

将以下代码复制

using UnityEngine;
using UnityEngine.AI;

public class AI : MonoBehaviour
{
    public Transform[] jumpPoints; // 跳跃点数组
    private NavMeshAgent navMeshAgent; // 导航网格代理组件
    private int currentJumpPointIndex; // 当前跳跃点索引
    private bool isJumping; // 跳跃状态

    [SerializeField]
    private float jumpForce = 5f; // 跳跃力

    void Start()
    {
        navMeshAgent = GetComponent(); // 获取导航网格代理组件
        currentJumpPointIndex = 0; // 初始化当前跳跃点索引为0
        isJumping = false; // 初始化跳跃状态为false
    }

    void Update()
    {
        if (jumpPoints.Length > 0) // 如果有跳跃点
        {
            navMeshAgent.SetDestination(jumpPoints[currentJumpPointIndex].position); // 设置目标点为当前跳跃点

            // 检查小球是否靠近当前跳跃点
            if (Vector3.Distance(transform.position, jumpPoints[currentJumpPointIndex].position) < 1f)
            {
                if (!isJumping) // 如果当前未处于跳跃状态
                {
                    isJumping = true; // 设置跳跃状态为true
                    GetComponent().AddForce(Vector3.up * jumpForce, ForceMode.Impulse); // 对小球施加向上的跳跃力
                }
            }
            else
            {
                isJumping = false; // 设置跳跃状态为false
            }

            if (isJumping && GetComponent().velocity.y == 0) // 如果处于跳跃状态并且垂直速度为0
            {
                // 切换到下一个跳跃点
                currentJumpPointIndex++;
                if (currentJumpPointIndex >= jumpPoints.Length)
                {
                    // 重置跳跃点索引为0
                    currentJumpPointIndex = 0;
                }
                isJumping = false; // 设置跳跃状态为false
            }
        }
    }
}

 接下来点击

T05_unityAI跳跃球 c#_第28张图片 ctrl选中除地板和小球以外的障碍物体点击设置

T05_unityAI跳跃球 c#_第29张图片 

 选中地板点击设置

T05_unityAI跳跃球 c#_第30张图片

 选中小球点击设置

T05_unityAI跳跃球 c#_第31张图片

 接下来ctrl 选中 所有物体 点击bake烘培

T05_unityAI跳跃球 c#_第32张图片

烘培效果如下

T05_unityAI跳跃球 c#_第33张图片 

选择主摄像机对齐视角

T05_unityAI跳跃球 c#_第34张图片 

检查小球是否绑定了两个脚本+刚体+碰撞器+Nav导航组件

T05_unityAI跳跃球 c#_第35张图片

 再创建一个空物体 作为移动停止目标

T05_unityAI跳跃球 c#_第36张图片

将该目标移动至障碍物之后终点处

T05_unityAI跳跃球 c#_第37张图片 

将空物体MBy轴调至与小球同高 0.5

T05_unityAI跳跃球 c#_第38张图片 

 我们通过材质给墙体及障碍物涂上颜色

T05_unityAI跳跃球 c#_第39张图片

运行即可自动巡航

T05_unityAI跳跃球 c#_第40张图片 

 

你可能感兴趣的:(c#,开发语言)