2019-08-21 05:20:20 yingduo5775 阅读数 60
  • 大话Unity2019实战篇:物理弹球

    课程内容 应用Unity引擎的功能,参考物理弹球的玩法,快速开发物理弹球小游戏; 本课程通过需求分析,给用户系统的罗列了物理弹球要达到的效果和需要使用的功能; 课程内容主要包括:Github+2D工程创建、场景构建、小球发射、障碍物扣血、小球的回收以及计分、音效、瞄准线等如何实现,使用户在熟悉Unity2018功能的同时,了解Unity2019新功能,并且能快速开发物理弹球小游戏;

    142 人正在学习 去看看 郑洪智

########### 目录 & 信息 ###########
±–第一阶段:Unity3D概要及入门
| ±–1 零基础学C#开发
| ±–2 Unity3D概要和基础知识讲解
| ±–3 Unity3D创建场景
| ±–4 unity3d常用组件及分析
| ±–5 Unity3D角色控制和物理特效
| ±–6 Angrybot实例分析及游戏发布流程
| —7 Mecanim动画系统
±–第三阶段:Unity3D项目开发实战
| ±–1 Kinect体感切水果游戏开发
| ±–2 Unity3D实例教程之3D塔防游戏
| ±–3 ARPG游戏实战
| —4 Unity3d之3D坦克大战实战
±–第二阶段:Unity3D进阶学习
| ±–1 Unity3D_UGUI游戏界面开发教程
| ±–10 unity游戏性能优化
| ±–11 Unity3d项目导航系统实现
| ±–2 Unity3D协同函数与异步加载功能实战
| ±–3 Unity3D用户手册
| ±–4 Unity3D人工智能编程
| ±–5 3D基础数学编程
| ±–6 3D基础渲染管线
| ±–7 3D纹理映射
| ±–8 3D混合&深度测试
| —9 Unity3D常用网络框架与实战解析
—第四阶段:Unity3D选修
±–1 NGUI插件从入门到高级
±–2 NGUI插件项目实战
±–3 Unity基础游戏特效
±–4 3D着色器Shader
±–5 Unity3D插件开发
±–6 Unity3d插件开发与SDK对接实战
—7 Unity3D之跑酷项目实战

http://songti.net/thread-1198-1-1.html

2018-11-11 13:38:24 NCZ9_ 阅读数 923
  • 大话Unity2019实战篇:物理弹球

    课程内容 应用Unity引擎的功能,参考物理弹球的玩法,快速开发物理弹球小游戏; 本课程通过需求分析,给用户系统的罗列了物理弹球要达到的效果和需要使用的功能; 课程内容主要包括:Github+2D工程创建、场景构建、小球发射、障碍物扣血、小球的回收以及计分、音效、瞄准线等如何实现,使用户在熟悉Unity2018功能的同时,了解Unity2019新功能,并且能快速开发物理弹球小游戏;

    142 人正在学习 去看看 郑洪智

游戏制作是在游戏场景中完成的,一个项目可以根据需要创建多个游戏场景。 

首次保存场景

场景未被保存为场景文件时,Hierarchy视图中场景名字显示为未命名状态:

菜单栏 ---> File ---> Save Scenes(快捷键:Ctrl+S)保存当前场景。

  • 在弹出的窗口选择保存位置(但一定是在当前项目的Assets文件夹中)。
  • 在弹出的窗口“文件名(N):”后面的输入框中对待保存的场景命名。

单击保存,场景即被以命名后的文件保存在对应位置:

此时,Hierarchy视图中场景名字也随着更改:

创建新的场景

 菜单栏 ---> File ---> New Scene ---> 下面步骤同上

Project视图 ---> 右击 ---> Create ---> Scene ---> 在文件夹中会创建出新的场景资源,重命名,双击可打开。

对场景修改保存

对场景中任何对象进行修改后,Hierarchy视图中场景名字会出现*:

菜单栏 ---> File ---> Save Scenes(快捷键:Ctrl+S)保存当前场景。

此时*号消失,表示当前场景对象为最新更改后的状态,并已经保存到场景文件。

Ctrl+Z可撤销最新一次更改。

场景另存为

菜单栏 ---> File ---> Save Scenes as...(快捷键:Ctrl+shift+S)可对当前场景进行另存为操作。

2016-12-19 13:36:00 weixin_30500663 阅读数 20
  • 大话Unity2019实战篇:物理弹球

    课程内容 应用Unity引擎的功能,参考物理弹球的玩法,快速开发物理弹球小游戏; 本课程通过需求分析,给用户系统的罗列了物理弹球要达到的效果和需要使用的功能; 课程内容主要包括:Github+2D工程创建、场景构建、小球发射、障碍物扣血、小球的回收以及计分、音效、瞄准线等如何实现,使用户在熟悉Unity2018功能的同时,了解Unity2019新功能,并且能快速开发物理弹球小游戏;

    142 人正在学习 去看看 郑洪智

国内最新Unity3D视频教程合辑

麦子学院最新Unity3D视频教程上线啦,此为现目前国内最全、最新Unity3D教程,分享给广大小伙伴,希望对大家学习Unity3D有帮助:

 

第一阶段:Unity3D概要及入门

零基础学C#开发

Unity3D概要和基础知识讲解

Unity3D创建场景

unity3d常用组件及分析

Unity3D角色控制和物理特效

Mecanim动画系统

 

第二阶段:Unity3D进阶学习

Unity3D人工智能编程

3D基础数学编程

3D基础渲染管线

 

第三阶段:Unity3D项目开发实战

Kinect体感切水果游戏开发

 

学习+实践+总结+学习+实践,你就是下一个Unity3D游戏开发大牛!!!

转载于:https://www.cnblogs.com/android-blogs/p/6197150.html

2020-02-22 22:51:14 qq_41452267 阅读数 9
  • 大话Unity2019实战篇:物理弹球

    课程内容 应用Unity引擎的功能,参考物理弹球的玩法,快速开发物理弹球小游戏; 本课程通过需求分析,给用户系统的罗列了物理弹球要达到的效果和需要使用的功能; 课程内容主要包括:Github+2D工程创建、场景构建、小球发射、障碍物扣血、小球的回收以及计分、音效、瞄准线等如何实现,使用户在熟悉Unity2018功能的同时,了解Unity2019新功能,并且能快速开发物理弹球小游戏;

    142 人正在学习 去看看 郑洪智


实现在Unity3D中渲染YUV420P文件,可以渲染一帧(即全景图片),也可以渲染多帧(即全景视频)。

Unity3D中创建场景

Sphere

首先在Sence中创建一个Sphere
在这里插入图片描述
注意sphere中Scale的Z一定要是负数,因为我们是在球的内部观看视频的。

Material

创建一个材质球,右键Assets—>Create—>Material,并将其挂在创建的Sphere上

Shader

创建一个Unilt Shader,右键Assets—>Create—>Shader—>Unlit Shader
在LOD 200下面加入cull off命令,以此可以在球的内部看到内容物:
在这里插入图片描述
将此着色器文件挂在刚刚创建好的材质球上:
在这里插入图片描述

Render Texture

创建Render Texture,右键Assets—>Create—>Render Texture
设置Size
在这里插入图片描述
将此渲染纹理挂在材质球上:
在这里插入图片描述

编写CS脚本进行渲染

创建脚本

创建C#脚本,右键Assets—>Create—>C# Script,将其挂在Sphere上

完整代码

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
using System;

public class yuv_d : MonoBehaviour
{
    //public RawImage img;

    int frameCount;

    int frameNow = 0;

    byte[] file;

    public Renderer target;

    private int h = 2048;
    private int w = 2048;

    // Plana 連續儲存,Packed 交錯儲存
    // 使用 Plana YUV420 格式
    void Start()
    {
        //一次读取所有比特
        file = File.ReadAllBytes("D:/unity3D/sphere/Assets/360/DownSample_420p.yuv");

        frameCount = GetFrameCount(file, w, h); // 影像寬高
                                                //输出总帧数
        print("Frame Count : " + frameCount);


    }

    void Update()
    {

        if (frameNow > frameCount - 1) return;
        
        GetTexture(file, file_d, w, h); // 影像寬高

        frameNow++;

        print("Frame : " + (frameNow) + " (" + (int)(frameNow / (float)(frameCount) * 100) + "%)");
    }

    int GetFrameCount(byte[] file, int width, int height)
    {
        return file.Length / ((width * height) * 3 / 2);
    }

    //原始纹理t
    Texture2D t = null;

    void GetTexture(byte[] file, byte[] file_d, int width, int height)
    {
        if (t != null) Destroy(t);

        t = new Texture2D(width, height, TextureFormat.RGB24, false);

        int Ysize = t.width * t.height;
        int UorVsize = t.width * t.height / 4;

        Color[] cArr = new Color[t.width * t.height];

        byte U = 0;
        byte V = 0;

        int k = 0;
        //offset偏移量
        int offset = frameNow * ((width * height) * 3 / 2);
        //int offset_d = frameNow * (width * height);

        for (int y = 0; y < t.height; y += 2)
        {
            for (int x = 0; x < t.width; x += 2)
            {
                U = file[offset + Ysize -1+ k++]; //注意要减一
                V = file[offset + Ysize -1+ k + UorVsize];  //注意要减一

                int i = y * t.width + x;
                int mY = t.height - 1 - y;

                byte Y00 = file[offset + i];
                byte Y01 = file[offset + i + t.width];
                byte Y10 = file[offset + i + 1];
                byte Y11 = file[offset + i + t.width + 1];

                float R00 = (Y00 + 1.4075f * (V - 128)) / 255f;
                float G00 = (Y00 - 0.3455f * (U - 128) - 0.7169f * (V - 128)) / 255f;
                float B00 = (Y00 + 1.779f * (U - 128)) / 255f;

                float R01 = (Y01 + 1.4075f * (V - 128)) / 255f;
                float G01 = (Y01 - 0.3455f * (U - 128) - 0.7169f * (V - 128)) / 255f;
                float B01 = (Y01 + 1.779f * (U - 128)) / 255f;

                float R10 = (Y10 + 1.4075f * (V - 128)) / 255f;
                float G10 = (Y10 - 0.3455f * (U - 128) - 0.7169f * (V - 128)) / 255f;
                float B10 = (Y10 + 1.779f * (U - 128)) / 255f;

                float R11 = (Y11 + 1.4075f * (V - 128)) / 255f;
                float G11 = (Y11 - 0.3455f * (U - 128) - 0.7169f * (V - 128)) / 255f;
                float B11 = (Y11 + 1.779f * (U - 128)) / 255f;
               

                t.SetPixel(x, mY, new Color(R00, G00, B00, 1));
                t.SetPixel(x, mY - 1, new Color(R01, G01, B01, 1));
                t.SetPixel(x + 1, mY, new Color(R10, G10, B10, 1));
                t.SetPixel(x + 1, mY - 1, new Color(R11, G11, B11, 1));
            }
        }

        t.Apply();
        target.sharedMaterial.SetTexture("_MainTex", t);//着色器中纹理名称

    }
}

实现效果

在场景中的Sphere上完成全景图片的渲染
在这里插入图片描述

参考链接

https://blog.csdn.net/weixin_38884324/article/details/80638027
https://blog.csdn.net/weixin_43778515/article/details/90268117

2019-09-27 19:35:38 zhuxiaoyang2000 阅读数 266
  • 大话Unity2019实战篇:物理弹球

    课程内容 应用Unity引擎的功能,参考物理弹球的玩法,快速开发物理弹球小游戏; 本课程通过需求分析,给用户系统的罗列了物理弹球要达到的效果和需要使用的功能; 课程内容主要包括:Github+2D工程创建、场景构建、小球发射、障碍物扣血、小球的回收以及计分、音效、瞄准线等如何实现,使用户在熟悉Unity2018功能的同时,了解Unity2019新功能,并且能快速开发物理弹球小游戏;

    142 人正在学习 去看看 郑洪智

Unity中创建两个场景

在Unity中创建一个主场景Main,一个测试场景CubeScene,在CubeScene场景中可随意添加几个物体,如下图所示:
CubeScene

使用脚本创建AssetBundle

新建一个C#脚本,命名为CreateAssetBundle.cs,代码如下:

using UnityEngine;
using UnityEditor;

public class CreateAssetBundle : Editor 
{
    [MenuItem("Assets/Build AssetBundle Scene")]
    static void BuildScene() {
        string[] levels = {"Assets/Scenes/CubeScene.unity"};
        BuildPipeline.BuildPlayer(levels, Application.dataPath+"/CubeScene.unity3d", 
            BuildTarget.WebGL, BuildOptions.BuildAdditionalStreamedScenes);
        AssetDatabase.Refresh();
    }
}

在 Unity 编辑器 Assets 根目录下创建一个 Editor 文件夹,将这个脚本放进去。右键空白处,Build AssetBundle Scene,即可创建一个名为 CubeScene.unity3d 的AssetBundle。

服务器设置

我申请的是阿里云的ECS云服务器,Web服务器使用的是Tomcat。我们的目的是:访问服务器上的 .unity3d 文件时,能够下载到本地。所以,修改tomcat/conf下的 web.xml 文件,添加MIME 处理方式,如下所示:
服务器设置
在 tomcat/webapps 下,创建一个AssetBundle文件夹,将上节创建的 CubeScene.unity3d 文件放到这个文件夹,如下所示:
放到文件夹下

使用脚本读取服务器上的AssetBundle

创建一个 LoadWebAsset.cs 脚本,并将其挂载到主场景Main的相机上(或任意物体),注意将url中的DomianName替换成自己的网址。代码如下:

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.Networking;

public class LoadWebAsset : MonoBehaviour
{
    void Start ()   
    {
        StartCoroutine(LoadSceneFromWeb());
    }  
    
    IEnumerator LoadSceneFromWeb()
    {
        string url = "http://DomainName/AssetBundle/CubeScene.unity3d";
        Debug.Log(url);

        UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url);
        yield return request.SendWebRequest();

        AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
        string[] scenePath = ab.GetAllScenePaths();
        SceneManager.LoadScene(scenePath[0]);
    }
}

发布并测试

发布场景时,只选择主场景 Main。
发布
发布完成后,将其放到服务器上,然后再访问其网址即可。

Unity创建游戏的理念可以被jian'da

博文 来自: kuloveyouwei
没有更多推荐了,返回首页