2019-09-22 14:05:19 fengliaoai 阅读数 12399

每周更新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

2013-01-12 14:52:45 borsyu 阅读数 7094

    不得不说,unity3d是一个解放生产力的游戏引擎,自带了各种编辑器,可以进行一系列的可视化操作。

需要注意的是,unity3d适合FPS游戏,物理游戏等中小型的游戏,并不太适合MMO开发。

    从最开始接触unity3d,到了解大致内容,能上手开发,自己断断续续用了半个月时间。期间走了不少弯路,

总结了一下一个自己倒过头来觉得适合一些没有接触过unity3d的朋友的学习路线:


此过程假设学习者:

        1. 有一定图形学基础,比如清楚3D平移旋转等操作,四元数基本原理,对纹理,材质,灯光等有基本了解。

        2. 开发语言不是障碍,即采用何种语言进行开发不是问题。

        3. 阅读英文艺术文档没有障碍

对于1,如果是计算机专业毕业,一般找一本图形学的书籍看半天足够了。

对于2,unity3d支持C#,Javascript,Boo三种脚本语言开发,可以任选一种。

学习路线也可以根据实际情况任选。

学习路线1:

       1.  手册manual第一部分通读,并熟悉unity3d环境(半天)

       2.  通读手册脚本指南中的overview部分(半天)

       3.  官网的例子学习,3DPlatformTutorial(一周)


学习路线2:

       1. 手册manual第一部分通读,并熟悉unity3d环境(半天)

        2. 照书学,理论结合实例,如果基础稍弱,且想学想做的游戏有不少2D元素,可以采用《Unity 3.x Game Development beginner》一书,                  

        若基础稍好一点点,可以采用《Unity.3.x.Game.Development.Essentials》一书。PS:这2本书都有英文电子版可以下载。(一周)


OK,就这么简单,其实只要几天,就足够上手开发了。认真做完这几步,基本上已经能够应付大部分游戏开发内容了,剩下的就可以边做边熟悉了。


2014-10-27 09:32:57 yangwei19680827 阅读数 9133

1,无返回值
AndroidJavaClass fee = new AndroidJavaClass("com.
wiker.Test");

fee.CallStatic("print", "Hello", "World");

 

 

Java源码

package  com.wiker

 

public class Test{

 

public static void print(String str1,String str2){

System.out.println(str1);

System.out.println(str2);

}

}

 

java程序将打印

Hello

World

 

2,有返回值

AndroidJavaClass fee = new AndroidJavaClass("com.wiker.Test");

stringstr = fee.CallStatic<string>("getStr","Hello", "World");

Debug.log(str);

 

Java源码

package  com.wiker

 

public class Test{

 

public static void getStr(String str1,String str2){

return str2+" "+str2;

}

}

 

Unity3d控制台将打印Hello world

 

 

Java调用Unity3d

UnityPlayer.UnitySendMessage("MainEvent","Success", "");

将调用MainEvent中的绑定的脚本中的Success方法

MainEvent是空的GameObject,绑定一个脚本
 

 

一般Unity调用Java的时候如果需要回调则会用到Java调用Unity3D,如调用支付宝等

2019-05-24 17:20:52 qq_38456196 阅读数 161

         Unity3D是由Unity Technologies开发的一个能让玩家轻松创建诸如三维游戏、虚拟现实、实时电影与动画、建筑可视化、数字教育、洗车/运输与制造等众多类型互动内容的多平台的综合型游戏开发工具,是一款功能强大的专业游戏引擎。现在也有众多的公司在使用Unity3D来开发游戏,如何能更好的学习Unity3D,首先应该去了解一下Unity3D主要有哪些部分组成。

         Unity3D主要由两大部分组成:引擎工具部分和代码脚本部分。所以我们的学习需要针对这两部分来交叉进行学习。

         引擎工具部分学习:不管你之前有没有学过游戏开发,了解和学习引擎工具也是非常重要的。引擎工具的学习,能让你理解很多游戏开发相关的概念,包括渲染部分和游戏逻辑部分。当你真正的熟悉了游戏引擎之后,你的游戏开发之路就会走的更深更远,因为你可以将代码和引擎做一个很好的配合,而且跟美术、策划、程序都能进行很好的交流。引擎工具的学习,更像是你在使用一款软件,了解好引擎的每个模块以后,再去反复的熟练使用,这样学习过程中就不会有很多的困扰。

         代码脚本部分:当你对引擎工具有一定熟悉之后,就可以开始你的C#学习之旅了。对,就是学习C#,从Unity2018开始,Unity公司已经完全弃用了UnityScript(JavaScript变形)和Boo。如果你之前没有学习过编程语言,学习C#的道路便是陡峭的。编程语言涵盖的内容、概念、逻辑、效率和设计都是非常之多。所以系统的学习C#才是关键。

         项目实战:当你两部分学习都没问题了之后,就需要动手开始你的项目实战了。引擎工具是你的砖,脚本代码是你的工具,有了这些之后你就可以通过它们来盖起游戏项目这座房子。真正的实战才能让你串联所有的知识点,让你更深刻的记住并熟练使用各个模块的功能与应用。

         说完了学习的方法,去哪里学才是最重要的。现在比较好的“爪爪游戏学院” https://www.paws3d.com/,就是一个很好的选择。他们的线上课程不但包含了引擎工具、代码和项目实战的内容。而且把学习路线也非常清晰的规划出来了,只要跟着Level1-Level3的顺序进行学习,学习思路就很清晰而且不会乱。而且爪爪游戏学院的老师也有很高的能力与教学水平,老师每周都会提供直播项目实战,直播答疑。这种远程面对面的学习方式,不但解决了时间和地域的问题,也是一种非常经济的学习方式,而且一直会有老师在陪着与督促你学习,想要学不会都难!最后提供一个Unity3D学习交流群:935714213。

2020-01-07 10:50:43 weixin_42834178 阅读数 58

在学习Unity3D时记录的笔记的笔记

Unity3D官网地址:https://www.unity.com/
Unity3D中文官网地址:https://www.unity.cn/

Unity3D中“There are inconsistent line endings in the ‘xxx’ script.”一类的警告的解决方案

学习Unity3D的时候经常会看到类似于下面这种警告:

There are inconsistent line endings in the ‘xxx’ script. Some are Mac OS X (UNIX) and some are Windows.
This might lead to incorrect numbers in stacktraces and compiler errors.Many text editors can fix this using Convert Line Endings menu commands.

虽然警告不影响正常使用,但是强迫症看到警告还是想要解决掉,网上查了查找到了原因:

通过Unity3D编辑器创建的脚本文件是以"LF"结尾(Unix平台),MonoDevelop IDE创建的也是以“LF”结尾(Unix平台),而直接用Visual Studio创建的文件是以“CR LF”结尾(Windows平台)。由于换行编码不一致导致报以上警告。

解决方案如下:
在Visual Studio 2019菜单栏中选择文件然后选择高级保存选项在这里插入图片描述
在行尾处选择Windows (CR LF)保存,以后通过Unity3D编辑器创建的文件将默认以“CR LF”换行。在这里插入图片描述

Visual Studio中没有高级保存选项的解决方案

如果Visual Studio中没有高级保存选项的,可以通过在菜单栏中选择工具选择自定义添加高级保存选项
在这里插入图片描述在这里插入图片描述在这里插入图片描述
添加高级保存选项后可以通过上下移选项来调整其位置
在这里插入图片描述

Unity3D中Debug.Log和Print的区别

在学习或使用Unity3D的时候,就会遇到调试的问题,在Unity3D中调试比较麻烦,不像在Visual Studio中可以直接设置断点来调,所以选择打印消息的方式来调试。

但是打印消息也有几种方式,一种的Print,一种的Debug.Log

PrintMonoBehaviour的一个成员。

Debug则是一个密闭的类。

所以在使用的范围上,Print必须要继承MonoBehaviour类,而Debug不用。

在Reflector中反编译UnityEngine这个DLL会发现Print方法的实现其实非常简单。Print就是通过Debug.Log来完成的。所以Print就是Debug.Log的一个简单封装

  public static void print(object message)
    {
        Debug.Log(message);
    }

Unity中关于四元数的API详解(转载自https://www.cnblogs.com/driftingclouds/p/6626183.html)

Quaternion类

Quaternion(四元数)用于计算Unity旋转。它们计算紧凑高效,不受万向节锁的困扰,并且可以很方便快速地进行球面插值。 Unity内部使用四元数来表示所有的旋转。

Quaternion是基于复数,并不容易直观地理解。 不过你几乎不需要访问或修改单个四元数参数(x,y,z,w); 大多数情况下,你只需要获取和使用现有的旋转(例如来自“Transform”),或者用四元数来构造新的旋转(例如,在两次旋转之间平滑插入)。
大部分情况下,你可能会使用到这些函数:

  • Quaternion.LookRotation,
  • Quaternion.Angle
  • Quaternion.Euler
  • Quaternion.Slerp
  • Quaternion.FromToRotation
  • Quaternion.identity。

Quaternion 是一个结构体,本身成员变量相对简单,可以作为函数参数高效传递。

Unity默认方向

在深入了解API之前,我们需要先明确一些基本的概念,就是方向、旋转究竟是如何表示的。
Unity中使用左手坐标系,假如把世界坐标系跟东南西北进行结合起来看,大致如下图所示:
在这里插入图片描述

默认的方向对应如下表:

坐标轴 对应方向
+x 右(东)
-x 左(西)
+y
-y
+Z 前(北)
-Z 后(南)

假设以你自己身体为例,你站立在地面上,面朝北方,此时就是默认方向,也就是Unity中的方向就是面向+Z轴方向,那么此时+X轴在东方,+Y轴对应正上方。此时对应的欧拉角是(0,0,0),此时对应的前方矢量是(0,0,1),上方矢量是(0,1,0)。

这里我区分了左右上下前后的概念,因为这些概念同时也对应了Vector3类、Transform类中的相应的方向函数。

方向的表示法

①欧拉角表示法

假如你使用一组欧拉角表示旋转,XYZ三个参数代表相应轴向按照顺归YZX的旋转,因此(0、90、90)代表先进行+Z轴旋转90度,再沿着+Y轴进行90度旋转,更多详细内容可以参考前述文章《【Unity编程】Unity中的欧拉旋转》

②前方上方矢量界定法

编程过程中,大部分需要明确指定方位的时候就需要使用这个方法。要确定一个朝向,我们可以使用两个向量来确定:即前方矢量和上方矢量。当一个朝向的前方和上方确定之后,这个朝向也就完全确定了。
举例来说,如果现在只提供一个朝向,就是你现在面朝北方,那么这个方向已经完全确定了吗?显然没有。因为你右侧躺在地上,看向北方,还是在面朝北方,这时候就需要另外一个矢量,也就是上方。当给出上方之后,这个朝向就完全确定了。
上方需要严格给出吗?
在Unity中,我们很多时候,不需要给出严格的上方朝向。比如,仍然是上面那个例子,如果我面朝北方,先给出(0,0,1)代表我的前方矢量。那么,如果我给出的方向不是严格的上方矢量,比如是(0,0.5,0.5),是否可以?答案也是可以的,因为这两个矢量显然已经确定了一个方向,前方是严格的,而实际的上方可以通过前方朝着你给出的上方矢量旋转90度得出。也就是说,你给(0,1,0)作为上方矢量,和给出在下图中弧度范围内(不包含+Z和-Z)所有方向的矢量都是相同的结果。
在这里插入图片描述

③绕轴旋转界定法

第三种定义旋转的方法就是围绕某个指定的轴向旋转一定的角度。这个方法也可以确定一个相对旋转,它以从默认方向(此时前方+Z,上方+Y)出发,沿着指定的轴向进行指定角度的旋转,旋转后的前方和上方是确定的。因此这个方法也可以用来确定朝向。

④A向到B向相对旋转表示法

还有一种方法就是从A向到B向的相对旋转,这种表示了一个旋转的相对变化。比如A为(0,1,0),B为(0,0,1),也就是相对旋转量代表原来的上方被旋转到了前方,这样的一个四元数也可以用欧拉角表示成(90,0,0),也就是沿着+X轴旋转了90度。

注意上面四中表示方法中,有的明确表明了上方矢量,有的好像只明确了前方矢量,要明确的一点就是,它们都是从默认矢量出发的,如果没有明确指定上方朝向,那么就是使用默认的上方,也就是+Y方向。

成员变量

  • eulerAngles 欧拉角,返回当前四元数所对应的欧拉角
  • this[int] 可以使用类似数组和下标的形式从四元数中获取四个四元数参数
  • x、y、z、w 分别代表x、y、z、w 参数,具体代表的内容可以参考前文《【Unity编程】四元数(Quaternion)与欧拉角》,你最好不要通过修改四个参数来改变四元数,除非你真的非常了解它们的含义。

静态成员
identity 单位四元数,也就是默认的无旋转状态,此时与世界坐标相同,前方指向+Z,上方指向+Y

成员函数

函数形式 解释
void Set(float new_x, float new_y, float new_z, float new_w) 设置x、y、z、w 分量,与this[]功能相同
void SetFromToRotation(Vector3 fromDirection, Vector3 toDirection) 设置成静态函数FromToRotation的结果
void SetLookRotation(Vector3 view, Vector3 up = Vector3.up) 设置成静态函数LookRotation的结果
void ToAngleAxis(out float angle, out Vector3 axis) 设置成静态函数AngleAxis的结果

说明:成员函数几个set方法多用于将当前四元数设置成目标四元数,目标四元数的构建方法与对应名称的静态函数相同。

静态函数

函数形式 解释
static float Angle(Quaternion a, Quaternion b) 计算两个四元数前方矢量之间的夹角度数
static Quaternion AngleAxis(float angle, Vector3 axis) 构建一个四元数,它表示沿着一个轴旋转固定角度,即上述表示法③
static float Dot(Quaternion a, Quaternion b) 计算两个四元数之间的点积,返回一个标量,这个函数一般用不到,它的点积不代表什么具体的物理含义,具体定义方法见我的前述文章
static Quaternion Euler(float x, float y, float z) 构建一个四元数,它用欧拉旋转表示,即上述表示法①
static Quaternion FromToRotation(Vector3 fromDirection, Vector3 toDirection) 构建一个四元数,它表示从指向fromDirection方向到指向toDirection方向的相对旋转量,见上述表示法④
static Quaternion Inverse(Quaternion rotation) 构建一个四元数,它是指定的四元数的逆,也就是逆向旋转,比如原四元数表示相对+X轴旋转了90度,那么此函数结果就是相对+X轴旋转了-90度
static Quaternion Lerp(Quaternion a, Quaternion b, float t) 构建一个四元数,表示从四元数a到b的球面插值,所谓的插值也就是中间旋转量,从a作为起点,此时对应t为0,到b为终点,此时对应t为1。当t取0-1之间的小数时,就代表了中间的插值结果。这个方法与Slerp相同,计算速度快,但是精度低,如果相对旋转变化量很小,则效果不理想
static Quaternion LerpUnclamped(Quaternion a, Quaternion b, float t) 与Lerp相同,区别是,Lerp的t值会被钳制在[0,1]之间,而此方法则不会,t允许超出计算
static Quaternion LookRotation(Vector3 forward, Vector3 upwards = Vector3.up) 构建一个四元数,使用前方上方矢量确定朝向,也就是上述表示法②
static Quaternion RotateTowards(Quaternion from, Quaternion to, float maxDegreesDelta) 构建一个四元数,表示从一个四元数from(的前方)向着另外一个四元数(的前方)旋转,但不能超出指定的角度,也就是如果两个前方矢量夹角超过指定角度,则旋转到达指定角度时就停止,若是夹角本身不足的话,则结果直接为目标四元数to,与上述表示法④的意思很接近
static Quaternion Slerp(Quaternion a, Quaternion b, float t) 球面插值,与Lerp功能相同,t值也被钳制,计算精度高,但是速度相对较慢
static Quaternion SlerpUnclamped(Quaternion a, Quaternion b, float t) 与Slerp功能相同,只是t值不被钳制,允许超出计算
static Quaternion operator * (Quaternion lhs, Quaternion rhs) 乘法运算符重载,当表示两个连续的旋转时,可以使用lhs * rhs的形式得出连续旋转的结果,lhs为左值,rhs为右值。注意左值是先进行的旋转,叠加右值旋转。用法示例:lhs = lhs * rhs;
static Vector3 operator *(Quaternion rotation, Vector3 point) 乘法运算符重载,表示对一个矢量point施加旋转rotation,得出旋转后的结果矢量。用法示例:Vector3 result=rotation * point

验证前方上方矢量表示法

为了验证前方上方矢量表示法的实际上方会重新计算,我设计了以下小实验。
在这里插入图片描述
在场景中设置三个物体,它们的朝向是打乱的,从左到右分别对应1、2、3。可以使用以下代码将三个物体朝向调整为一致。

		//前方上方矢量界定法的实际上方会重新计算
        m_t1.transform.rotation = Quaternion.LookRotation(Vector3.forward, Vector3.up);
        m_t2.transform.rotation = Quaternion.LookRotation(Vector3.forward, new Vector3(0,0.5f,-0.5f));
        m_t3.transform.rotation = Quaternion.LookRotation(Vector3.forward, new Vector3(0,0.5f,0.5f));

在start方法中执行上述代码后,如下:
在这里插入图片描述
三个物体朝向是一致的,也就说明了上方矢量确实是进行了重新计算。

总结几种表示方法

下面使用代码总结几种表示法,对应同样的四元数,大致有四种表示方法。

        //旋转量的4种表示形式
        Quaternion q1=Quaternion.Euler(90, 0, 0);
        Quaternion q2 = Quaternion.LookRotation(Vector3.down ,Vector3.forward);
        Quaternion q3 = Quaternion.AngleAxis(90,Vector3.right);
        Quaternion q4 = Quaternion.FromToRotation(Vector3.up, Vector3.forward);
        showQ("q1",q1);
        showQ("q2",q2);
        showQ("q3",q3);
        showQ("q4",q4);

它们的输出结果是:
在这里插入图片描述
也就是说,这几种形式表示的四元数结果完全相同。

将四元数旋转应用于子弹射击示例

当枪管转动起来,子弹仍然沿着正确的朝向发射出去,可以使用很简单的几句话,修改之前的代码后如下:

            Bullet_2 bullet = m_compPool.takeUnit<Bullet_2>();
            //发射时,将子弹的初始位置为枪口的当前位置
            bullet.m_transform.position = m_transform.position;
            //将子弹的初始化旋转设置为指向当前枪口前方
            bullet.m_transform.rotation = Quaternion.LookRotation(m_transform.forward);

在这里插入图片描述

如何学习Unity3D

阅读数 159

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