unity3d 第三人称示例_unity官方第一人称示例 - CSDN
  • Unity 3D 入门 介绍



    一. 工作区域详解


    1. Scence视图 (场景设计面板)


    scence视图简介 : 展示创建的游戏对象, 可以对所有的游戏对象进行 移动, 操作 和 放置;

    -- 示例 : 创建一个球体, 控制摄像机, 让球体在摄像机拍摄的视图中显示出来;




    (1) 摄像机导航


    摄像机旋转(Tumble) : alt + 鼠标左键, 摄像机会按照鼠标滚动的垂直中线进行旋转, 可以查看摄像机当前的状态, 注意只是改变视图中的状态, 摄像机还是在视图正中央位置, 摄像机的位置属性是不变的;

    摄像机移动(Track) : alt + 鼠标中键, 移动摄像机到视图中的其它位置, 注意只是改变视图中的位置, 摄像机的实际坐标是不会改变的;

    缩放视野(Zoom) : alt + 鼠标右键/滚轮, 缩小放大摄像机视野;

    穿越模式(Flythrough) : 鼠标右键 + A/S/D/W, 第一人称模式在场景中移动, 鼠标控制前进方向, WASD控制 左 前 后 右 方向;

    居中(Center) : F 键, 在 Hierarchy 面板中选中对象, 按 F 键, 即可将选中的对象居中;


    (2) 摄像机视角


    Persp工具 : 在场景视图的右上角有一个 Persp 工具, 可以对该工具操作 切换摄像机视角;



    顶视图 : 单击 y , 就会进入顶视图模式;



    侧视图 : 单击 z 进入侧视图;



    正视图 : 单击 x 进入正视图;



    透视视图 : y 轴在上, 使用 alt + 鼠标左键, 调整到透视视图;




    (3) 高级视图操作


    在设计面板中有一个工具栏



    绘制模式 : 控制对象的绘制, 默认 Textured 模式, 使用指定的颜色 或 贴图绘制对象;

    -- Wireframe 模式 : 显示对象的物理网格;

    -- Tex Wire 模式 : 把对象的贴图 和 它们的线框叠加在一起;



    渲染模式 : 对对象进行微调, 优化; 

    -- 默认 RGB 模式 : 带颜色的方式显示所有对象;

    -- Alpha 模式 : 使用对象的 Alpha 值(灰度显示) 显示对象;

    -- OverDraw 模式 : 显示场景中有多少时间消耗在重复绘制上;

    -- Mipmaps 模式 : 显示对象使用的最理想的贴图大小;



    场景光照 : 切换光照方式, 方式一 使用默认的内置光照, 方式二 使用开发者设置的光照;


    (4) 对象变换 (Object Transform)


    对象变换 : 处理选中对象的位置, 旋转 和 大小, 主要有以下两种修改方式;

    -- 属性查看器修改 : 在 Inspector 视图中输入新的属性值, 可以进行变换;

    -- 变换工具修改 : 通过变换工具;


    通过属性查看器修改 : 选中 Camera, 可以在 Inspector 视图中查看 Camera 属性, 其中的 Transform 属性就是摄像机的 位置, 旋转 和 缩放属性;




    改变位置

    -- 通过拖动属性坐标轴修改(位置改变) : 选中 Camera 对象之后, 在Scence 视图中Camera 会出现三个坐标轴, 可以使用鼠标拖动 Camera 沿着某一条坐标轴移动;



    -- 自由拖动对象(位置改变) : 点击 对象 的 中心位置, 可以自由拖动, 但是不精确;


    旋转 : 选中 对象, 按 E 键, 或者点击工具栏的旋转图标, 使用鼠标拖动即可进行旋转操作;



    缩放 : 选中物体, 按 R 键, 或者 点击工具栏的 缩放工具, 使用鼠标拖动坐标轴 即可 在这个坐标轴方向进行缩放;




    2. Game视图 (游戏预览面板)


    Game视图 : 显示摄像机拍摄的内容, 是摄像机朝向的内容;



    播放控件


    -- 运行游戏 : 激活预览面板, 开始游戏;

    -- 暂停游戏 : 使运行中的游戏暂停, 再次点击该按钮 从 暂停处继续运行;

    -- 单帧运行 : 游戏 一帧 一帧 的移动, 主要用于调试bug, 错误等;


    游戏预览面板控制栏


    -- Aspect (任意显示比例下拉列表) : 改变 Scence 视图的显示比例, 默认为任意比例显示, 在为不通大小的界面制作游戏时使用;


    -- Maximize on Play(最大化) : 将Scence 视图扩大到整个视图中;

    -- Gizmos 工具 : 切换游戏中 绘制 和 渲染 的所有工具;




    3. Hierarchy 视图 (游戏组成对象列表)


    Hierarchy视图 : 存放游戏对象 和 文件;



    创建对象 : 点击 create 按钮可以创建 游戏场景内的 物体对象;

    删除对象 : 选中对象之后 按 Delete 键, 即可删除对象;


    对象的父子关系 : 父子关系就是将无关对象建立分组, 位于一个单一的对象之下, 父对象包括的对象叫做 孩子对象;


    -- 作用 : 对父对象进行移动 缩放 旋转操作, 其下的孩子对象也进行同样的操作;


    添加光照 : 球体创建好后, 在Game视图中却只能看到 一个圆, 这是因为我们没有创建 光照;

    -- 创建定向光 : 选择 create 创建对象, 创建 Directional Light 之后, 之后可以看到 Game 中的 3D 效果;


    -- Game效果





    4. Project视图 (项目资源列表)


    Project视图 : 存放一些游戏资源 (脚本, 对象, 场景, 文件等),;

    -- Assets目录 : 开发者创建 和 导入的资源 都放在该目录下, 包括 贴图, 脚本 Camera 等;


    给游戏中的对象涂装 : 给游戏对象改变颜色, 可以在Project视图中创建一个材质, 然后将材质赋给对象;
    -- 创建材质 : 点击 Project 视图的 create 按钮, 选择材质;


    -- 给材质选择颜色 : 在 Assets 中选中刚创建的材质;


    -- 选择颜色 : 这时 Inspector 视图中会出现材质的属性, 点击 Main Color 按钮, 可以选择材质的颜色;

          

    -- 为将材质赋给对象 : 直接将 Assets 中的材质 拖拽到 Hierarchy 视图中的对象上即可, 效果如下 : 





    5. Inspector 视图 (属性查看器)


    在这个视图中可以修改Game视图的颜色, 以及Scence 视图的属性;


    设置Game视图的颜色 : 选中摄像机, 然后在 Inspector 视图中会出现下面的内容, 点击Background 会出现 右图;

         

    改变后的效果 : 




    Transform属性 : 选中球体, 在 Inspector 视图中会看到以下信息;

    -- Position : 选中物体的位置坐标;

    -- Rotation : 选中物体的角度;

    -- Scale : 选中物体的缩放大小;




    二. 入门示例一 - 第 一/三 人称控制游戏


    1. 制作地形


    (1) 引入地形 


    Project 视图中, 右键点击 Assets, 选择 Import Package --> Terrain Assets (地形), 下面是 引入的地形资源;



    (2) 移动摄像机到正常位置




    (3) 编辑地形


    在 Hierarchy 视图中选中 Terrain 地形, 在 Inspector 中可以对地形进行操作;


    地形隆起操作 : 点击刷子, 在地形上进行操作;





    让地形变得圆滑 : 上图中 红框中的 山地比较尖锐, 使用 第三个工具可以使地形变得圆滑;


    -- 圆滑效果




    (4) 移动摄像机到合适的位置


    移动摄像机 : 点击 Hierarchy 视图中的 Main Camera 对象, 调整摄像机的位置, 使摄像机能够完整的拍摄地形;



    摄像机拍摄的地形效果




    (5) 为场景贴图


    导入场景贴图 : 在 Project 视图中, 右键点击 Assets, 选择 Import Package --> Terrain Assets, 下面是导入的地形纹理;



    为地形添加纹理 : 在Hierarchy 视图中选中 Terrain(地形) 对象, 在 Inspector 视图中会显示 地形的属性;

    -- 点击 Inspector 视图中的 Edit Textures, 选择 Add Texture, 在弹出的 Add Terrain Texture 对话框中选择对应的贴图;     


    纹理贴图效果




    (6) 添加天空盒


    在上图中没有天空, 不是很美观;


    配置天空盒 : 选择菜单栏 Edit --> Render Settings --> Inspector视图 --> skybox material;



    选择天空盒 : 在弹出的 Select Material 对话框中选择天空盒;



    最终效果




    2. 第一人称控制


    (1) 导入角色控制包


    右键点击 Project 视图中的 Assets, 选择 Import Package --> Character Controller, 全部导入;




    (2) 在 Scence 视图添加第一人称控制


    删除摄像机 : 摄像机需要删除, 因为第一人称视角就是摄像机, 如果有摄像机的话就不会出现第一人称视角了, 这里将摄像机在 Scence 视图中删除;


    设置第一人称控制 : 将第一人称控制拖拽到 Scence 视图中, 调整坐标, 注意 y 轴坐标必须大于0, 也就是必须在地平面以上, 否则会掉下去;





    游戏效果 : 进入 Game 视图, 可以进行游戏体验, 与 CS 差不多, 可以跳跃, 行走, 鼠标控制方向;





    3. 第三人称控制 


    将第三人称角色拖拽到 Hierarchy 视图中 : 在 Scence 视图中调整 角色位置;



    选择摄像机



    效果




    三. 入门示例二 - 篮球场景



    1. 创建篮球场


    (1) 创建长方体


    创建过程 : GameObject --> Create Other --> Cube, 创建长方体;



    查看自己创建的长方体 : 在 Hierarchy 视图中, 双击刚才创建的 Cube 长方体, 就可以在 Scence视图中定位到这个 Cube上; 



    (2) 调整 Cube 大小


    将Cube调整成篮球场比例的大小 : 根据下面截图进行调整;



    (3) 为篮球场添加纹理


    导入纹理图片 : 选择菜单栏 Assets --> Import New Assets, 在弹出的对话框中选择要导入的纹理资源图片;

     


    创建新的纹理 : 在 Project 视图中, 选择 create 创建一个新的纹理;



    为篮球场添加纹理

    -- 显示属性 : 在 Hierarchy 视图中选择 Cube; 

    -- 选择材料 : 在 Inspector 视图中的 Materials 中选择之前创建的纹理; 

    -- 选择纹理 : 然后在 下面的 纹理属性中选择 刚才的篮球场 纹理贴图图片;




    2. 创建篮球


    (1) 创建球体


    创建过程 : 菜单栏 GameObject --> Create Other --> Sphere (球体);



    调整大小位置姿态 : 按照下图中的数据进行调整;



    (2) 为篮球添加纹理


    添加纹理过程

    -- 创建一个新的材料 : 在 Project 视图中, 选择 create --> Materal;

    -- 显示属性 : 在 Hierarchy 视图中, 点击 Sphere 对象, 在 Inspector 视图中显示出 球体的属性;

    -- 选择材料 : 点击 Inspector 视图中的 Material 中的圆点, 选择刚创建的材料;


    -- 选择纹理 : 点击 材料中的 纹理图片上的 Select 按钮, 弹出对话框选择纹理;



    篮球对象已添加完毕




    3. 添加光源和摄像机


    (1) 创建光源


    创建过程 : 选择 菜单栏 GameObject --> Create Other --> Directional light (平行光);



    (2) 调整光源姿态和强度


    根据下图中的参数调整



    (3) 调整摄像机参数


    调整摄像机参数, 背景颜色, 视角大小



    4. 为篮球添加动作


    (1) 导入材料包


    导入材料包 : 菜单栏 Assets --> Import Package --> Physic Materials;



    (2) 为篮球添加刚体属性


    添加过程 : 在 Hierarchy 视图中选中篮球, 然后选择 菜单栏 Component --> Physic --> Rigidbody;



    (3) 为篮球添加球体碰撞者


    添加过程 : 在 Hierarchy 视图中选中球体, 选择菜单栏 Component --> Physic --> Sphere Collider;



    (4) 为篮球添加弹性属性


    添加过程 : 选择 球体属性的 Sphere Collider属性, 选择材料 Material --> Bouncy (弹性);



    5. 运行示例


    点击Game视图中的运行按钮


    .


    展开全文
  • unity3D 人称简单射击示例

    千次阅读 2018-06-08 00:09:20
    参考:unity5实战第三章,慢慢学习放两个东西一个是玩家,主摄像机附在上面,配上Mouselook.cs,FPSInput.cs使其能响应键盘移动跟鼠标移动Mouselook.cs,FPSInput.cs的实现前面有一个是敌人,附上Reactive.cs受击反馈...

    参考:unity5实战第三章,慢慢学习

    放两个东西

    一个是玩家,主摄像机附在上面,配上Mouselook.cs,FPSInput.cs使其能响应键盘移动跟鼠标移动

    Mouselook.cs,FPSInput.cs的实现前面有

    一个是敌人,附上Reactive.cs受击反馈脚本,实现在下面

    现在要做的是:按下左键,射出子弹,被射中区域显示球(子弹),被射中的敌人受击反馈消失


    现在给玩家的主摄像机配上rayshoot.cs ,摄像机可以射出射线。

    rayshoot.cs编写思路:

    0.OnGUI()写个准星

    1.响应左键,使用carema的API在摄像机位置产生射线

    2.如果射中了(不一定是敌人)

        A.射中敌人,命令敌人调用受击反馈函数,敌人1s后消失

        B.射中别的,产生(子弹)小球附上射中的点上,子弹1s后消失

                由于需要延时消失,用协程来实现

    实现如下

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using System;
    
    public class RayShooter : MonoBehaviour {
        private Camera _camera;
    	// Use this for initialization
    	void Start () {
            _camera = GetComponent<Camera>();
    	}
    	void OnGUI()
        {
            int size = 12;
            float posX = _camera.pixelWidth / 2 - size / 4;
            float posY = _camera.pixelHeight / 2 - size / 2;
            GUI.Label(new Rect(posX, posY, size, size), "*");
        }
    	// Update is called once per frame
    	void Update () {
            //响应左键
            if (Input.GetMouseButton(0)==true) {
                Vector3 point = new Vector3(_camera.pixelWidth / 2, _camera.pixelHeight/2, 0);
                Ray ray=_camera.ScreenPointToRay(point);
                RaycastHit hit;
                if (Physics.Raycast(ray, out hit))//hit就是被击中的目标
                {
                    // Debug.Log(point);
                    //获取打到的物体
                    GameObject hitobj = hit.transform.gameObject;
                    ReactiveTarget RT = hitobj.GetComponent<ReactiveTarget>();
                    if (RT != null){
                        RT.Reacttohit();//调用敌人的被击反馈
                    }
                    else{
                        StartCoroutine(F(hit.point));//用协程造子弹,因为要编写子弹要1s后消失的效果
                    }
                }
            }
    	}
        private IEnumerator F(Vector3 pos)//协程
        {
            GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            sphere.transform.position = pos;
            yield return new WaitForSeconds(1);
            Destroy(sphere);//1s后消失
        }
    }

     敌人需要受击反馈,1.5s后消失,使用协程,ReactiveTarget.cs如下

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class ReactiveTarget : MonoBehaviour {
        public void Reacttohit()
        {
            StartCoroutine(Die());
        }
        private IEnumerator Die()
        {
            this.transform.Rotate(-75, 0, 0);
            yield return new WaitForSeconds(1.5f);
            Destroy(this.gameObject);
        }
    	// Use this for initialization
    	void Start () {
    		
    	}
    	
    	// Update is called once per frame
    	void Update () {
    		
    	}
    }
    

    展开全文
  • 包含一个较为完整的UNITY第人称射击游戏的教程,及其使用到的素材包,含角色武器模型。 《我的Unity 3D之旅》博客配套美术资源
  • Unity中经常用到第一人称漫游,比较常用的是用Unity Assets中导入的Charaters包,里面包含第一人称控制器和第三人称控制器,将第一人称控制器拖入场景中就可以用AWSD实现前后左右移动,控制器自带脚步声音效,在...

    在Unity中经常用到第一人称漫游,比较常用的是用Unity Assets中导入的Charaters包,里面包含第一人称控制器和第三人称控制器,将第一人称控制器拖入场景中就可以用AWSD实现前后左右移动,控制器自带脚步声音效,在一些游戏场景中经常使用。
    在这里插入图片描述
    在这里插入图片描述
    但是如果需要在场景中来回切换位置,第一人称似乎比较难实现,比如我们经常看到的VR看房中的样板间展示,点击房间的缩略图就会进入到该房间进行漫游,要实现这种效果,我采用的是在场景中布置了多个摄像机,放在合适的位置。
    在这里插入图片描述
    接着给这几个摄像机和鼠标添加移动的脚本,实现按AWSD可以前后左右移动,移动鼠标可以实现画面旋转查看。
    新建Mouselook脚本

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    
    public class Mouselook : MonoBehaviour
    {
        public enum RotationAxes
        {
            MouseXAndY = 0,
            MouseX = 1,
            MouseY = 2
        }
        public RotationAxes axes = RotationAxes.MouseXAndY;
        public float sensitivityHor = 1f;
        public float sensitivityVert = 1f;
    
        public float minmumVert = -45f;
        public float maxmumVert = 45f;
    
        private float _rotationX = 0;
        // Use this for initialization
        void Start()
        {
    
        }
    
        // Update is called once per frame
        void Update()
        {
            if (axes == RotationAxes.MouseX)
            {
                transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityHor, 0);
            }
            else if (axes == RotationAxes.MouseY)
            {
                _rotationX = _rotationX - Input.GetAxis("Mouse Y") * sensitivityVert;
                _rotationX = Mathf.Clamp(_rotationX, minmumVert, maxmumVert);
    
                float rotationY = transform.localEulerAngles.y;
    
                transform.localEulerAngles = new Vector3(-_rotationX, rotationY, 0);
            }
            else
            {
                _rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;
                _rotationX = Mathf.Clamp(_rotationX, minmumVert, maxmumVert);
    
                float delta = Input.GetAxis("Mouse X") * sensitivityHor;
                float rotationY = transform.localEulerAngles.y + delta;
    
                transform.localEulerAngles = new Vector3(-_rotationX, rotationY, 0);
            }
    
        }
    }
    

    新建move脚本

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class move : MonoBehaviour {
    
        public CharacterController controller;
        public Rigidbody rigidbody;
        public float speed = 1;
    
        // Use this for initialization
        void Start()
        {
            rigidbody = this.GetComponent<Rigidbody>();
            controller = this.GetComponent<CharacterController>();
        }
    
        //Move
    
    
        // Update is called once per frame
        void Update()
        {
            //Move
            if (Input.GetKey("a"))
                controller.SimpleMove(transform.right * -speed);
            if (Input.GetKey("d"))
                controller.SimpleMove(transform.right * speed);
            if (Input.GetKey("w"))
                controller.SimpleMove(transform.forward * speed);
            if (Input.GetKey("s"))
                controller.SimpleMove(transform.forward * -speed);
        }
    
    }
    
    
    
    

    把脚本挂在摄像机上,并添加Rigidbody组件和Charcter Controller组件,在move组件中选择对应的摄像机的controller和rigidbody。
    在这里插入图片描述
    接下来是实现各个相机之间的跳转,新建一个空物体来控制切换,我这里是GameObject。将下面两个脚本都挂在空物体从camera_1跳转camera_0

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Camerachange2 : MonoBehaviour
    {
    
        public GameObject camera_0;
        public GameObject camera_1;
        private Vector3 CameraOriginalPosition2;//摄像机2的初始位置
        public IEnumerator Start()
        {
            yield return new WaitForSeconds(0.1F);
            camera_1.SetActive(true);
            camera_0.SetActive(false);
            //记录摄像机2的原始位置
    
            CameraOriginalPosition2 = new Vector3(camera_1.transform.localPosition.x, camera_1.transform.localPosition.y, camera_1.transform.localPosition.z);
            print("摄像机2的原始位置的X=" + CameraOriginalPosition2.x);
            print("摄像机2的原始位置的Y=" + CameraOriginalPosition2.y);
            print("摄像机2的原始位置的Z=" + CameraOriginalPosition2.z);
        }
    
    
        // Update is called once per frame
        public void change1()
        {
            camera_1.SetActive(false);
            camera_0.SetActive(true);
            camera_1.transform.position = CameraOriginalPosition2;
        }
    }
    
    

    新建脚本从camera_0跳转camera_1:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Camerachange : MonoBehaviour {
    
        public GameObject camera_0;//设置成public可以使unity中出现如下图所示的
        public GameObject camera_1;
        private Vector3 CameraOriginalPosition; //摄像机1的原始位置
       
        public IEnumerator Start()
        {
            yield return new WaitForSeconds(0.1F);
            camera_1.SetActive(false);
            camera_0.SetActive(true);
            //记录摄像机1的原始位置
    
            CameraOriginalPosition = new Vector3(camera_0.transform.localPosition.x, camera_0.transform.localPosition.y, camera_0.transform.localPosition.z);
                print("摄像机1的原始位置的X=" + CameraOriginalPosition.x);
                print("摄像机1的原始位置的Y=" + CameraOriginalPosition.y);
                print("摄像机1的原始位置的Z=" + CameraOriginalPosition.z);
               
            
     
            
        }
        public void change()
        {
            camera_0.SetActive(false);
            camera_1.SetActive(true);
            camera_0.transform.position = CameraOriginalPosition;
        }
      
       
        // Update is called once per frame
        void Update () {
    		
    	}
    }
    

    上述代码可以实现每次跳转漫游之后都能后相机回到初始位置
    在这里插入图片描述
    然后添加按钮实现点击跳转。为按钮增加点击事件。
    在这里插入图片描述

    展开全文
  • 《我的Unity 3D之旅》博客配套美术资源
  • 光有一个主角,我们的人称射击游戏肯定是没法玩的,所以还需要添加敌人。而为了游戏更具有可玩性,敌人需要能够追击主角并攻击主角。在很多游戏中,经常需要敌人在复杂的地形环境中追着主角跑。而场景中经常会...

    四、敌人

    1. 自动寻路。光有一个主角,我们的第一人称射击游戏肯定是没法玩的,所以还需要添加敌人。而为了游戏更具有可玩性,敌人需要能够追击主角并攻击主角。在很多游戏中,经常需要敌人在复杂的地形环境中追着主角跑。而场景中经常会存在很多障碍物,这就AI要能够找出到达目标地点的最短路径,并且要能够绕开障碍物。这就需要游戏开发者编写出一个完善的寻路算法。然而在复杂的3D场景中,手写寻路算法是相当有挑战性的,毕竟不是每个游戏开发者都是算法大师。幸运的是,Unity已经提供了一个非常实用的寻路功能,对于开发者而言,只需要较少的代码就可以轻松实现复杂的寻路功能。Unity的寻路系统分为两部分,一是对场景进行设置使其满足寻路的要求,二是设置寻路者。

    2. 选择场景模型(即level游戏体),在Inspector窗口单击Static选项旁的小三角弹出下拉菜单,确保选中【Navigation Static】。只有选中Navigation Static的模型才会加入寻路计算。

    3. 在菜单栏选择【Window】→【Navigation】打开Navigation窗口进行设置。

    【Object】主要用来定义模型,如果取消选中【Navigation Static】则该模型不会用作寻路计算。

    【Bake】主要用来设置寻路条件,Agent Radius和Agent Height指寻路者的半径和高度(采用了圆柱模型),Max Slope是最大爬坡坡度,Step Height是最大爬梯高度,Drop Height是可以跳落的高度极限,Jump Distance是可以跳跃的距离极限。

    【Areas】定义了【Navigation Area】的取值范围,Unity内置了Walkable、Not Walkable、Jump三种寻路区域,可以自定义更多,最多31种。

    4. 设置完成后,选择Bake对地形进行计算。选择Clear会清除计算结果。计算出来的寻路数据会被保存为一个文件并与当前关卡相关联,有点类似LightMap。

    5. 在Project窗口Assets/Prefabs目录下找到Zombie.prefab,将其拖入场景。这是一个护士模样的僵尸模型,它就是寻路者,也就是我们游戏中的敌人。

    6. 在Inspector窗口选择【Add Component】→【Navigation】→【Nav Mesh Agent】为敌人添加寻路组件。此时可以进一步设置寻路选项。

    7. 创建脚本Enemy.cs,添加如下代码:

    using UnityEngine;
    
    [AddComponentMenu("MyGame/Enemy")]
    public class Enemy : MonoBehaviour
    {
        private new Transform transform;
        private Player player; // 主角
        private NavMeshAgent agent; // 寻路组件
        private float moveSpeed = 2.5f; // 移动速度
    
        /// <summary>
        /// 初始化
        /// </summary>
        void Start()
        {
            transform = GetComponent<Transform>();
            // 获取主角
            player = GameObject.FindGameObjectWithTag("Player").GetComponent<Player>();
            // 获取寻路组件
            agent = GetComponent<NavMeshAgent>();
            // 指定寻路器的行走速度
            agent.speed = moveSpeed;
            // 设置寻路目标
            agent.SetDestination(player.transform.position);
        }
    }
    在Start方法中获取了NavMeshAgent组件,然后调用其SetDestination方法设置主角为其目标点,这样就可以让敌人自动追击主角了。

    8. 将脚本Enemy.cs指定给敌人,运行游戏,敌人就会自动寻找最短路径朝主角的位置前进,并会躲开障碍物了。

    展开全文
  • 代码示例: using System.Collections; using System.Collections.Generic; using UnityEngine; public class fpsShoot : MonoBehaviour { private Camera _camera; private void Start() { _camera = ...
  • 最近更新Unity3D,更新包推送了Standard Assets Example Project的更新,于是便下载下来研究了下,发现还是挺好用的,里面有很多示例,有各种模型,适用于学习Unity的新手研究学习。在我们安装好Unity3D之后,安装...
  • 我个人觉得这本书写的至少很和我口味,而且他的光盘资料也很详尽,比如,一个实例,不仅有一个完整的实现工程,还有一份供作练习的工程(该...我接下来具体说说自己对 第三章“第一人称射击游戏”中的改动。 先上改动
  • 2018年什么游戏最火? 不用问,肯定是人人都在撸的“王者荣耀”和吃鸡游戏了。...Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如维视频游戏、建筑可视化、实时维动画等类型互动内容的多平台的综...
  • Unity3D是一个跨平台的游戏引擎,它提供了3d游戏的大部分基础功能实现,比如物理碰撞、3d模型显示、光照等功能,简化了使用者开发游戏的过程,更能够节省非常多的成本,unity3d与别的游戏引擎最大的不同是,它的代码...
  • 3.一个有HDMI输出的摄像机 4.一根正常的HDMI线,一根HDMI转MicroHDMI的线(因为相机的HDMI接口是小口的HDMI接口) 实现过程记录: 首先我在某宝租了两台hololens设备,在某东买了一个视频采集卡,手头有一架支持...
  • 今天呢,我们来说说Unity3D中的角色控制,这篇文章并非关注于Unity3D中的某项具体内容,而是博主在经过大量的实践后所得的感悟。今天的文章从内容上可以分为2种模式、1个组件、1种模型,希望对大家学习Unity3D起到...
  • 一、Unity3D 5.0.1-示例项目“汽车游戏”的展示及开发准备
  • 众所周知,Unity3D是一个能够实现轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎。在现有的版本中,其强大的游戏制作功能已经达到和其他顶级游戏引擎媲美的地步。但是 其制作并不如想象中的困难。...
  • unity3d 各大插件评测

    万次阅读 2018-01-30 15:00:43
    原创文章如需转载请注明:转载自风宇冲Unity3D教程学院 引言:想用Unity3D制作优秀的游戏,插件是必不可少的。工欲善其事必先利其器。本文主旨是告诉使用Unity3D引擎的同学们如何根据需求选择适当的工具...
  • 分享一款个人Unity3d软件设计开发实例 1 概述 软件制作过程中感觉有些像在做游戏,本软件为个人兴趣,还在测试制作阶段,仅用于学习交流。通过导入实际测量点云数据和抽样钻孔数据信息,采用DTM三角网维建模技术和...
  • Unity3d编辑器的使用

    千次阅读 2019-06-24 19:24:43
    第一步:双击Unity3d,点击New 第二步:填写项目信息,注意:工程必须放在空文件夹下 第三步:点击创建 第四步:工程创建完毕 文件夹介绍: Assets:放项目所有资源的文件夹 Library:文件资源库 ...
  • Unity3D手机游戏开发

    2019-01-08 08:03:56
    Unity3D手机游戏开发》 基本信息 作者: 金玺曾 出版社:清华大学出版社 ISBN:9787302325550 上架时间:2013-8-7 出版日期:2013 年8月 开本:16开 页码:1 版次:1-1 所属分类:计算机 更多关于 》...
  • Unity3D常用插件

    2019-01-16 11:29:34
    Unity3D常用插件,想想自己也有小半年unity经验了,于是整理了一下自己用过的插件并附上下载地址。 NGUI,这个不用多说,上官网:http://www.tasharen.com/?page_id=140,也可以去我的百度云盘:...
1 2 3 4 5 ... 17
收藏数 322
精华内容 128
关键字:

unity3d 第三人称示例