11228人加入学习
(25人评价)
Unity研究实验室
价格 免费

vs2010和unity的 联调

vs的常用设置都在工具->选项中

build/settings 发布的时候可以用作调试的Developments Build和script Debugging

 

#案例:主角的移动

属性:

private Transform player;

start():

player = GameObject.Find("Player").transform;

 

#加断点 点击附加到unity中

[展开全文]

#屏幕坐标和世界坐标的映射

 

创建一个plane 位置(0,0,0)

旋转 -90,0,0

监视鼠标的按下和抬起

void update(){

if(Input.GetMouseButtonDown(1)){

}

 

if(Input.GetMouseButtonDown(0))

{

}

}

[展开全文]

创建一个空物体

命名 mspaint 挂同名脚本

--------

#属性 2个  颜色和大小

private Color paintColor = Color.red;

private float painSize = 0.1f;

#start方法和update方法先删除掉

on value change事件可以来注测变化

#region 收缩代码 看起来公整

 

#endregion

 

[展开全文]

修改color而不是tinecolour

#ui->canvas

         ->toggle

            ->(label)red()

              ->(label)blue()

               ->(label)green()

上述三个打包成组(空物体 toggle group)

IS ON 

on value changed 检测值的改变

 

1.color group添加toggle group的组件才可以设置成单选。

而且在每个小组件内部也同样需要添加 赋值为一组的

???为啥我的勾选了就褪色了?

 

[展开全文]

右键一个空物体

在空物体上挂在line_rander

[展开全文]

#lineRander

transform 没啥用

#颜色的设置方式

#角落的顶点处 corner 

#两边的顶点处 emd cap 

#line render的材质

#修改颜色 是材质的问题 有的材质不支持

材质选择spirit 的 defult

有些材质和颜色不支持

[展开全文]

利用NavMeshAgent来计算最短路径,运动过程、移动控制我们自定义。

using UnityEngine;
using UnityEngine.AI;

public class Player : MonoBehaviour
{
    public float rotateSmoothing = 7.0f;
    public float speed = 4.0f;
    private NavMeshAgent agent;

    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
        //禁用NavMeshAgent的控制位置和控制旋转。
        agent.updatePosition = false;
        agent.updateRotation = false;
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                agent.nextPosition = transform.position;
                agent.SetDestination(hit.point);
            }
        }
        //模拟位置和Player的位置保持一致。
        //agent.nextPosition = transform.position;
        Move();
    }

    private void Move()
    {
        if (agent.remainingDistance < 0.5f) return; //remainingDistance 目标位置与当前位置剩余的距离。
        agent.nextPosition = transform.position;
        transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(agent.desiredVelocity), rotateSmoothing * Time.deltaTime); //desiredVelocity 期望速度,就是最短路径的方向。
        transform.Translate(Vector3.forward * speed * Time.deltaTime);
    }
}

//禁用NavMeshAgent的控制位置和控制旋转。

agent.updatePosition = false;

agent.updateRotation = false;

禁用updatePosition和updateRotation后,,鼠标左键点击地面Evn,绿圆柱体出来了,叫模拟位置。根据这个来计算最短路径。

 

//模拟位置和Player的位置保持一致。 agent.nextPosition = transform.position;

//模拟位置和Player的位置保持一致。(点击后没有绿框圆柱体跑出去)

[展开全文]
遗失的星空 · 2021-04-01 · 该任务已被删除 0
using UnityEngine;
using UnityEngine.AI;

public class PlaceBuilder : MonoBehaviour
{
    public GameObject builderPrefab;
    private NavMeshSurface surface;

    void Start()
    {
        surface = GetComponent<NavMeshSurface>();
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(1))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                GameObject go = GameObject.Instantiate(builderPrefab, hit.point, Quaternion.identity);
                go.transform.parent = this.transform;
                surface.BuildNavMesh();
            }
        }
    }
}

报错原因:Agent Type 不一致。Humanoid和Robot

Player上的NavMeshAgent组件和Env上的NavMeshSurface组件上的,Agent Type需要一致。

[展开全文]
遗失的星空 · 2021-04-01 · 该任务已被删除 0

Collect Objects:All:场景中的所有物体都会生产NavMesh

Collect Objects:Volume 体积

体积内才会生成NavMesh。

Volume体积,体积内才会生成NavMesh,点击Bake后的效果。

Collect Objects : Children,为孩子和当前挂在组件的物体一起生成NavMesh。

使用NavMeshSurface生成导航网格,不考虑是否是静态的【Navigation Static】。

Include Layers:通过不同的层来区分是否要进行生成导航网格。

Use Geometry:使用几何形状。

Render Meshes(渲染网格)来生成。看得见就会生成导航网格,看不见就不会生成导航网格。

Physics Colliders(物理碰撞器)来生成,有碰撞器就会生成导航网格。

Advanced 高级:

[展开全文]
遗失的星空 · 2021-04-01 · 该任务已被删除 0

Runtime NavMesh Build (运行时构建导航网格)

NavMeshBuildingComponent文件ZIP包:

https://github.com/Unity-Technologies/NavMeshComponents

需要导入:NavMeshComponent.zip压缩包中Asset文件下的文件到项目

①给游戏物体添加NavMeshSurface组件。

②Open Agent Settings 打开代理设置,添加Humanoid设置,点击 + 号,修改名字为Robot。修改Radius半径为0.1,Height高度为1。

③回到NavMeshSurface组件上,修改Agent Type为刚刚创建的Robot。

④点击Bake

[展开全文]
遗失的星空 · 2021-04-01 · 该任务已被删除 0

①在任何一个物体上添加OffMeshLink的组件。

②需要指定Start和End的位置。

灰色的链接,链接不可用。上面的End找到了附近的NavMesh,下面的Start的节点没有找到附近的NavMesh。

链接是双向的。

Cost Override 时间花费,没有花费,和Naviagtion---Area---Cost一样的。

Bi Directional 勾选就是双向的箭头链接,取消勾选就是单向的箭头链接,从Start到End的方向。

不可用,链接的颜色显示橙色的。

Activated 取消勾选就是这个链接不可用。

Auto Update Positon,自动更新位置,当Start和End位置发生改变,链接也会跟着改变。

Navigation Area,导航网格的区域。可行走的、

[展开全文]
遗失的星空 · 2021-03-31 · 该任务已被删除 0

给障碍物添加NavMeshObstacle组件。游戏中出现变化的物体。

勾选Carve,防止NavMeshAgent在走最短路径和障碍物NavMeshObstacle,阻挡了最短路径一致卡这个位置,到达不了目标点Target。而且会障碍物NavMeshObstacle移动会重新生成导航网格

勾选Carve会重新生成导航网格。

一直运动的物体,不建议勾选Carve,重新生成导航网格,十分消耗性能。因为会让开这条路的。

勾选Carve,的物体适用于不经常移动的物体。

 

不勾选Carve不会对导航网格造成影响。

勾选Carve会影响导航网格。

[展开全文]
遗失的星空 · 2021-03-29 · 该任务已被删除 0

Drop Height:跳下高度。

①、设置Drop Height,跳下高度

②、Navigation---Object---Generate OffMeshLinks 打勾(Generate OffMeshLinks 断开的导航网格)

③点击Bake

 

Jump Distance:跳跃距离,跳多远。

①、设置Jump Distance 跳跃距离;

②、设置Generated off Meshs打勾;

③、点击bake

[展开全文]
遗失的星空 · 2021-03-29 · 该任务已被删除 0

Align With View 设置成 与当前视口一致。

using UnityEngine;
using UnityEngine.AI;

public class Player : MonoBehaviour
{
    private NavMeshAgent agent;

    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                agent.SetDestination(hit.point);
            }
        }
    }
}

 

[展开全文]
遗失的星空 · 2021-03-29 · 该任务已被删除 0

NavMeshAgent和Navigation属性一致。

主要取决于导航网格的设置。

Areas:区域

Object下的Navigation Area:

Walkable、Not Walkable、Jump

Not Walkable,不可行走;门上面不需要行走,可以设置成不可行走。Not Walkable。

Cost 花费,代价

若是距离近,代价高,不会走这条路

[展开全文]
遗失的星空 · 2021-03-29 · 该任务已被删除 0

①、给Player添加NavMeshAgent组件

②、Player的绿圆柱体的框,是由于NavMeshAgent决定的,决定Player所占用的空间大小

运行不会动,因为我们还没有给它目标。指定Icon。

③、需要设置NavMeshAgent的目标位置才会移动。

using UnityEngine;
using UnityEngine.AI;

public class Player : MonoBehaviour
{
    public Transform target;
    private NavMeshAgent agent;

    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
        agent.destination = target.position;
    }

    void Update()
    {

    }
}

Speed:速度

Angular Speed:旋转速度

Acceleration:加速度,包含旋转的加速度

Stopping Distance:停止距离,到达距离目标位置多近停止移动。0是达到目标位置停止。

Auto Braking 取消勾选有减速效果,来回移动是因为减速效果超过了然后又要回来,回来又超过了,接着。勾选上了会到达目标位置停止移动。

 

[展开全文]
遗失的星空 · 2021-03-29 · 该任务已被删除 0

Agent Radius :Agent的半径,边界距离:

Agent Height:Agent 高度

Agent Height 可以通过的高度

Agent的高度是2米,图中高度小于2米,不能通过,所以不会生成Navigation路径

为什么没有生成Navigation路径,有可能是宽度小于1,因为Agent的半径是0.5,直径是1,第二种肯能是坡度大于45度,Agent的爬坡能力是最大是45度。

改小Agent Radius,Navigation的边界缩小,

Max Slope 最大坡度,只能爬小于45度的坡

Step Height :台阶高度,小于0.4就能爬上去,生成Navigation。一步蹬多高

【斜坡大于45度】这里的一点Navigation取决于Step Height的设置,可以走这么高。

[展开全文]
遗失的星空 · 2021-03-29 · 该任务已被删除 0

选中物体,Windows--AI---Navigation,设置为静态的Navigation Static,点击back烘焙

[展开全文]
遗失的星空 · 2021-03-29 · 该任务已被删除 0

授课教师

SiKi学院老师

课程特色

图文(1)
视频(24)
下载资料(2)