2019-03-01 16:50:57 beiluo77 阅读数 730
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4631 人正在学习 去看看 张刚

Unity学习笔记:Unity 3D 飞机大战

1、打开unity软件后,首先新建Quad作为背景,导入飞机模型,并为其添加刚体
然后创建C#脚本,挂载到飞机上。
2、给飞机创建子弹,让子弹成为预制体,同样创建C#脚本
3、创建陨石和敌机作为敌方,飞机发射子弹使其销毁,如果飞机与敌方相撞,则飞机爆炸消失。

放上完成后的图:
在这里插入图片描述
给飞机设置的组件:
alt
子弹的组件:
在这里插入图片描述
陨石的组件:
在这里插入图片描述
敌机和其子弹的组件与飞机类似,就不放图了~

接下来是代码:
1、飞机脚本

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


/** 玩家飞机飞行的脚本 */
public class PlayerMovement : MonoBehaviour
{
    /** 飞机可以飞行的区域 */
    public float xMax;
    public float xMin;
    public float zMax;
    public float zMin;

    /** 飞机自身的刚体 以及 飞机发射子弹的位置 */
    Rigidbody _plane_rig;           
    Transform _plane_fire_point;

    /** 子弹的预制体 */
    GameObject _bullet;

    private void Awake()
    {
        //获取刚体
        _plane_rig = this.GetComponent<Rigidbody>();
        //获取开火位置
        _plane_fire_point = transform.GetChild(1);
        //获取子弹的预制体
        //通过资源加载的方式获取预制体
        _bullet = Resources.Load("Prefabs/Bullet") as GameObject;
    }

    private void FixedUpdate()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        //飞机移动
        Move(h, v);
        //飞机开火
        Shoot();
    }

    /** 飞机的飞行速度 以及飞机的倾斜度 */
    public float plane_speed = 3f;
    public float plane_Tilt = 2f;
    void Move(float h,float v)
    {
        //1.获取飞机移动的方向
        Vector3 plane_fly_dir = new Vector3(h, 0, v);
        //2.设定飞机的飞行速度
        _plane_rig.velocity = plane_fly_dir * plane_speed;
        //3.移动
        _plane_rig.position = new Vector3
            (
                //Mathf.Clamp(x,y,z)的作用是将x限定在y和z之间
                Mathf.Clamp(_plane_rig.position.x,xMin,xMax),
                5f,
                Mathf.Clamp(_plane_rig.position.z,zMin,zMax)
            );
        //4.设置飞机倾斜度
        _plane_rig.rotation = Quaternion.Euler(0f, 0f, _plane_rig.velocity.x * -plane_Tilt);
    }


    float _shoot_rate = 0.5f;
    float _timer = 0f;
    void Shoot()
    {
        //计时
        _timer += Time.deltaTime;
        //按下鼠标左键
        if (Input.GetMouseButton(0) && _timer >= _shoot_rate)
        {
            //在_plane_fire_point.position的位置生成_bullet实例,保持_plane_fire_point.rotation的旋转
            Instantiate(_bullet, _plane_fire_point.position, _plane_fire_point.rotation);
            //重置定时器
            _timer = 0f;
        }
    }
}

2、子弹的脚本

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

public class BulletMovement : MonoBehaviour
{
    /** 子弹的飞行速度 */
    public float bullet_speed = 20f;

    private void FixedUpdate()
    {
        this.GetComponent<Rigidbody>().velocity = bullet_speed * transform.forward;
    }
}

3、陨石的脚本

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

public class AsteroidMove : MonoBehaviour
{
    //陨石的移动速度集合
    float[] _asteroid_speeds = { 8, 10, 13, 16 };

    private void Awake()
    {
        //左闭右开 [0,4)
        int index = Random.Range(0, _asteroid_speeds.Length);

        this.GetComponent<Rigidbody>().velocity = Vector3.back * _asteroid_speeds[index];
    }

}

陨石旋转

 //陨石旋转的速率集合
    float[] rotRations = { 4f, 6f, 8f };

    private void Awake()
    {
        int index = Random.Range(0, rotRations.Length);

        //Random.insideUnitSphere 随机返回球体(半径为1的球体)内部的任意一点
        this.GetComponent<Rigidbody>().angularVelocity = Random.insideUnitSphere * rotRations[index];
    }

陨石爆炸

/** 爆炸效果预制体 */
    public GameObject asteroidExp;
    public GameObject playerExp;

    private void OnTriggerEnter(Collider other)
    {
        //碰到陨石或者是敌方飞机 不处理直接返回
        if (other.gameObject.tag == "Asteroid" || other.gameObject.tag == "Enemy" || other.gameObject.tag == "EBullet")
            return;

        //碰到了子弹
        if(other.gameObject.tag == "Bullet")
        {
            //生成爆炸体
            GameObject exp = Instantiate(asteroidExp, transform.position, transform.rotation);
            //销毁
            Destroy(exp, 0.3f);
        }

        //碰到了玩家
        if(other.gameObject.tag == "Player")
        {
            //生成爆炸体
            GameObject exp = Instantiate(playerExp, transform.position, transform.rotation);
            //销毁
            Destroy(exp, 0.3f);
        }

        //销毁碰到的物体
        Destroy(other.gameObject);
        //销毁自身
        Destroy(transform.gameObject);

    }

以及陨石的管理

 /** 三个陨石预制体 */
    GameObject _Asteroid_01;
    GameObject _Asteroid_02;
    GameObject _Asteroid_03;

    /** 存放所有的陨石 */
    List<GameObject> _Asteroids;

    private void Awake()
    {
        //初始化陨石集合
        _Asteroids = new List<GameObject>();

        //通过资源加载的方式先获取到三个陨石
        _Asteroid_01 = Resources.Load("Prefabs/Asteroid_01") as GameObject;
        _Asteroid_02 = Resources.Load("Prefabs/Asteroid_02") as GameObject;
        _Asteroid_03 = Resources.Load("Prefabs/Asteroid_03") as GameObject;

        //将三个陨石加入到集合中
        _Asteroids.Add(_Asteroid_01);
        _Asteroids.Add(_Asteroid_02);
        _Asteroids.Add(_Asteroid_03);
    }

    private void Start()
    {
        //重复调用某一个方法
        InvokeRepeating("CreateAsteroid", 0f, 3f);
    }

    void CreateAsteroid()
    {
        //1.随机从集合中取出陨石
        GameObject asteroid = _Asteroids[Random.Range(0, _Asteroids.Count)];
        //2.创建随机位置
        Vector3 asteroidPos = 
            new Vector3(Random.Range(transform.position.x, -transform.position.x), 5f, 17.52f);
        //3.创建陨石
        Instantiate(asteroid, asteroidPos, Quaternion.identity);
    }

    private void OnApplicationQuit()
    {
        //当程序结束的时候取消invoke的重复调用
        CancelInvoke("CreateAsteroid");
    }

4、最后是敌机和其子弹

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

public class EnemyShip : MonoBehaviour {

    //敌机的移动速度集合
    float _enemy_speeds = 3f;
    Transform _eplane_fire;

    /** 敌机子弹的预制体 */
    GameObject _ebullet;

    private void Awake()
    {
        //左闭右开 [0,4)
        this.GetComponent<Rigidbody>().velocity = Vector3.back * _enemy_speeds;
        transform.eulerAngles = new Vector3(transform.eulerAngles.x, 180, transform.eulerAngles.z);

        //获取开火位置
        _eplane_fire = transform.GetChild(1);
        //获取子弹的预制体
        //通过资源加载的方式获取预制体
        _ebullet = Resources.Load("Prefabs/EBullet") as GameObject;

    }

    private void FixedUpdate()
    {
        //敌机开火
        Shoot();
    }

    float _shoot_rate = 2f;
    float _timer = 0f;
    void Shoot()
    {
        //计时
        _timer += Time.deltaTime;
        if (_timer >= _shoot_rate)
        {
            //在_plane_fire_point.position的位置生成_bullet实例,保持_plane_fire_point.rotation的旋转
            Instantiate(_ebullet, _eplane_fire.position, Quaternion.identity);
            //重置定时器
            _timer = 0f;
        }
    }
}

(敌机的爆炸及其子弹的爆炸和陨石爆炸代码类似,下面就不放了)


5、最后的最后(终于要完成了~)给敌机设置管理

/** 敌机 */
    GameObject _enemys;

    private void Awake()
    {
        //通过资源加载的方式先获取到敌机
        _enemys = Resources.Load("Prefabs/EnemyShip") as GameObject;
    }

    private void Start()
    {
        //重复调用某一个方法
        InvokeRepeating("CreateEnemy", 0f, 3f);
    }

    void CreateEnemy()
    {
        
        //1.创建随机位置
        Vector3 enemyPos =
            new Vector3(Random.Range(transform.position.x, -transform.position.x), 5f, 17.52f);
        //2.创建陨石
        Instantiate(_enemys, enemyPos, Quaternion.identity);
    }

    private void OnApplicationQuit()
    {
        //当程序结束的时候取消invoke的重复调用
        CancelInvoke("CreateEnemy");
    }

撒花!!!一个飞机大战小游戏就完成了,用 unity 做这款小游戏有些大材小用,却也的确比用 h5 简单很多!

2013-01-21 14:53:57 jeksonal 阅读数 16697
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4631 人正在学习 去看看 张刚

unity3D 用3DMax 做的模型时需要注意几点

1:方向问题
2:模型尺寸问题

3:模型所占资源大小问题

 

3DMax 做的东西导入到 Unity3D 中,在 Unity3D 引擎中 X 会被反向旋转 90 度();个人处理方式是建模时先将模型 X 轴旋转 90;再调节模型;

3DMax 做的东西导入到 Unity3D 中,由于 3DMax 默认的单位处理机制与 Unity3D 不一样,而导致显示过小的问题;所以,在制作模型前先调节好 3DMax 中的系统单位设置

具体操作:

 菜单栏: 选择 “自定义”  ,

再选择 “单位设置”-- >

 接着点选 “系统单位设置 ”  --->   将系统单位比例设置成:  ;再点击 “ 确定” 保存!

在模型的制作过程当中,为了使物体的坐标在物体的中心点,要记得冻结物体的坐标属性

当模型制作完成时,导出为 FBX 格式时还需注意:

在导出的 设置面板中 :

点击高级选项,然后出现:

确保 “ 场景单位转化为:”的设置为 "Meters"


模型导出后,模型资源可能很大,原因有以下几个:

1: 检测一下材质贴图的格式是否为:.png 的,不是请改过来 ;

2:看模型当中是否有过多的独立存在的物体,将不需要单独 存在给它合并在一块!


要是模型导入到Unity3D 中后,引擎运行变卡,就得看看模型的面是不是太多了!


2019-09-22 14:05:19 fengliaoai 阅读数 12150
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4631 人正在学习 去看看 张刚

每周更新unity3d视频教程,从入门到就业,官方unity3d培训,上千门实时更新课程,供学员在线观看学习,unity3d游戏开发,可以让学员随时随地学习!
免费网上学习unity3d自学教程,国内名师机构专业授课,O基础快速学习,1小时快速入门,7天unity3d自学教程学习,能力快速提升,优质作品随手呈现!

unity3d菜鸟自学教程介绍

unity3d难学吗?

unity3d自学教程目录

unity3d视频教程百度网盘下载

unity3d难学吗?
学习unity3d特效,多来学习路线网看教程,一线游戏特效老师,游戏特效就业安排!学习unity3d特效入门+进阶+精通选择专业才能学得专业!

unity3d自学教程目录
课程介绍:
Unity3d史诗 MMO ARPG 课程《泰斗破坏神》,精心设计将包含200+课时,由视频课时+直播课时+测试课时混合组成。最重头unity3d ARGP课程,完整的 ARPG 网络游戏开发教学。包含多人合作,在线多人游戏开发,角色创建系统,作战系统,RPG系统,技能系统,任务系统,商店系统。

课程大纲:

单机版功能实现

项目概要
登录系统
角色创建、选择、自定义系统
场景加载与游戏存储记录
角色控制
聊天通讯
游戏AI
战斗系统
游戏角色与玩家信息系统
商店系统
道具系统
装备系统
装备与道具掉落
仓库与背包系统
副本系统
任务系统
地图与寻路系统

网络版功能实现

服务端搭建
登录系统
角色选择
游戏场景
聊天功能
角色具体信息
商店系统
道具系统
装备系统
仓库和背包
副本系统
任务系统

unity3d视频教程百度网盘下载
http://www.xuexiluxian.net/unity3d-cainiao-zixue.html

2016-12-29 14:31:57 qq_36703442 阅读数 1649
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4631 人正在学习 去看看 张刚

蓝鸥免费Unity3D教程讲解  Unity3D学习必看教程

随着AR/VR进入人们的生活,面对AR/VR体验馆的出现,全民开始聊“AR/VR”成为一种社会现象!而作为一款全面整合的专业游戏引擎Unity是一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具。两者之间有什么联系?


到目前为止,针对VR开发的内容,至少有90%是基于Unity3D的平台开发的。换句话说Unity 3D之于VR有什么作用?现在我们正在叩开新时代的大门,Unity3D就是打开这座大门的钥匙。

免费Unity3D教程可以解决什么问题?


所需基础:零基础或C语言基础及其他编程基础   适合人群:游戏开发爱好者

Unity3D学习必看教程解说

在Unity3D的开发过程中,需要学习编程语言!目前Unity所支持C#和JavaScript,而C#开发的项目占90%以上。为了能更好匹配到企业岗位需求,学习C#开发成为众多开发者的首选!

免费Unity3D教程C#入门知识包括:二进制、数据类型,运算符,表达式,控制台语句,关系运算符,循环语句,一维数组,二维数组等。对于有C语言基础或其他编程基础的朋友,C#入门会变得更为容易一些!

C#入门只是让我们对编程语言有一些认识,C#入门的知识点设计可以帮助零基础的朋友,快速入门!而相对于C#入门,C#基础方面知识的学习,开始偏向逻辑性,简单的说是要开始和计算机对话!开始对计算机编辑指令!

免费Unity3D教程C#基础知识包括:枚举类型、结构体、类和对象、字段、方法、抽象类、静止类、封装、继承、构造和析构等,单从这些知识点的名称来说,在学习的过程中需要动用大脑。C#基础的学习并不是一个死记硬背的过程,需要我们举一反三的过程。如果无法做到举一反三,可能需要在C#基础部分,下功夫好好的锻炼是必不可少的。千万不要书到用时方恨少!

在C#学习之后,我们接下来将要步入正题:对Unity引擎的了解,这将是一场没有硝烟的较量!Unity作为一个工具,我们需要对其充分了解,才能更好的运用Unity来实现我们构想。那么,大家对于自己学习Unity有哪些构想?欢迎大家留意讨论!
2014-09-05 21:11:34 yangyisen0713 阅读数 6131
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4631 人正在学习 去看看 张刚

以下是个人对unity3dAircraftSimulator飞行模拟器包的使用方法的总结,以便自己和大家日后查看。

一、AircraftSimulator飞行模拟器(.unitypackage)资源效果图:

二、使用方法:

将AircraftSimulator的package导入u3d后,在AssetsUnityFS目录有一个名为Getting Started的PDF说明文档,里面说的还算比较详细。大家英语不好没关系,接着往下看!


在Assets\UnityFS\Prefabs文件下找到Example.prefab文件,拖入场景中,如图:


打开Window\UnityFS\Configure Input,点击OVERWRITE-Done,如图:




打开Edit\Project Settings\Input,如图:


可以看到右边的Inspector里面设置好了,直接打开Scenes下的Example是没有设置的,而且会提示报错,虽然不影响运行,但是飞机是不能操控的,如图:

最后删掉后来拖进去的飞机即可,原来的飞机就可以运行了。

飞机操控说明:前后左右:“wsad”;

起落架抬起和放下:“G”;

加大油门:长按“2”;

减小油门:长按“1”;

飞机起飞:“S”,拉起拉杆即可;‘

切换视角:“C”;

点火:“I”;

顺便说一句,这个飞机模拟器还是比较强大的,里面的仪表盘会根据高度转向等信息转动,而且比较逼真,有从飞机加油-抬升-起飞-收齐起落架等一些列动作,声音等平衡系统相当完善。不过还是要学习别人的技术,不能总是看别人的东西很NB,要拿来转换成自己的东西才是最终目的!

unity3d发布Android程序

阅读数 18567

UNITY3D常用资源网址

阅读数 1783

没有更多推荐了,返回首页