Unity3d开发


初识

学习地址总结

c语言中文网

原生物体

Cube 立方体

Sphere 球体

Capsule 胶囊体

Cylinder 圆柱体

Plane 平面

坐标栅格的一格默认为1米,为约定单位

原生的模型仅用于练习,真正的模型应该是在专业的建模的软件

脚本语言

可以使用JavaScript也可以使用C#语言进行编写脚本

JavaScript之前已经又所了解,但是在之前也只是在网页的基础上进行学习在网页上如何使用JavaScript脚本进行编译

js学习 | 毛豆人很逗 (userlyz.github.io)

C#脚本语言基础

变量类型

总共六种类型

1、整数类型

整数分成了八种类型

sbyte 有符号8为整数 ,取值范围为-128127 ; byte 无符号8为整数,取值范围0255 ;short 有符号16位整数,取值范围-32768-32767 nshort 无符号16位整数 ,取值范围065535 int 有符号32位整数,取值范围-21474896482147489647 nint无符号32位整数042994967295 long有符号64位整数,取值范围-2的63次方2的63次方 nlong无符号64位整数0~2的64位整数

类型 说明 取值范围
sbyte 有符号8为整数 -128~127
byte 无符号8为整数 0~255
short 有符号16为整数 -32768-32767
nshort 无符号16为整数 0~65535
int 有符号32为整数 -2147489648~2147489647
nint 无符号32为整数 0~42994967295
long 有符号64为整数 -的2的63次方~2的63次方
nlong 无符号64为整数 0~~2的64次方

2、浮点类型

依然是延续了float double两种浮点类型

float angles=36.5f;
double rate=0.253D;
类型 说明 取值范围
float 32位单精度浮点类型 -的2的128次方~2的128次方
double 64位双精度浮点类型 -的2的1024次方~2的1024次方

3、布尔类型

bool b=true;

4、字符类型(char)

转义字符 含义 转义字符 含义
' 单引号 \f 换页
" 双引号 \n 换行
\ 反斜线 \r 回车
\0 \t 水平制表符
\a 报警 \v 垂直制表符
\b 空格

5、引用类型

引用类型变量的赋值只复制对象的引用,而不复制对象本身

6、枚举类型

enum 枚举类型名称
{
    常量1=值1;
    常量2=值2;
    ...
   	常量n=值n;
}

变量声明

修饰符的添加

private(默认修饰符),只能在本类中访问。

**protected ** 只能在类或者派生类中访问。

**internal ** 只能在本项目中访问。

如果想让脚本中定义的变量在unity3d中的inspector面板中显示,必须使用public修饰

语句

分支语句

if (表达式){
    语句1
}else{
    语句2
}
###########
switch(值)
{
    case 值1:语句1;
        break;
    case 值n:语句n;
        break;
}

循环

do{
    语句
}while(条件);
while(条件){
    语句
}
for(int i=1;i<=10;i++){
    Console.WriteLine("{0},i")
}

函数

在Unity3d中,C#脚本需要预先加载库类

using UnityEngine;
using System,Collection;
public class NewBehaviourScript:MonoBehaviour{
}

所有游戏执行语句都包含在这个继承自MonoBehaviour类的自创脚本中

常用函数如下

1、Update()

正常更新,创建JavaScript脚本时默认添加这个方法,每一帧都会由系统调用该方法

2、LateUpdate()

推迟更新,此方法在Update()方法执行完之后调用,每一帧都调用一次

3、FixedUpdate()

置于这个函数中的代码每隔一定时间执行一次

4、Awake()

脚本唤醒,用于脚本初始化,在脚本周期内执行一次

5、Start()

在Update()之前,Awake()之后执行,Start()函数和Awake()函数的不同就在于Start()函数仅在脚本启用时执行

6、OnDestory()

当前脚本销毁时执行

7、OnGUI()

绘制游戏界面的函数,因为每一帧都要执行多次,所以一些时间相关的函数要尽量避免直接在该函数内部使用

8、OnCollisionEnter()

当一个游戏对象与另外的游戏对象碰撞时执行这个函数

9、OnMouseDown()

当鼠标在一个载有GUI元素或碰撞器的游戏对象上按下时执行该函数

10、OnMouseOver()

当鼠标在一个载有GUI元素或碰撞器的游戏对象上经过时执行该函数

11、OnMouseEnter()

鼠标进入物体范围时执行该函数,和上面有所不同,这个只执行一次

12、OnMouseExit()

鼠标离开物体范围时执行该函数

13、OnMouseUp()

鼠标释放时执行该函数

14、OnMouseDrog()

按住鼠标拖动对象时执行该函数

注意:

Awake()适合做初始化Start()才适合安全的访问其他脚本数据

实例

实例1

使用CreatePrimitive方法创建Unity3D中系统自带的基本游戏对象

使用C#脚本在unity3D中创建一个Cube模型和一个Sphere模型,通过屏幕上方的按钮控制Cube模型和Sphere模型的创建

创建脚本输入代码

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

public class CreatePrimitive : MonoBehaviour
{
    void OnGUI()
    {
        if (GUILayout.Button("CreateCube", GUILayout.Height(50)))
        {
            GameObject m_cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            m_cube.AddComponent<Rigidbody>();
            m_cube.GetComponent<Renderer>().material.color = Color.blue;
            m_cube.transform.position = new Vector3(0, 10, 0);
        }
        if (GUILayout.Button("CreateSphere", GUILayout.Height(50)))
        {
            GameObject m_cube = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            m_cube.AddComponent<Rigidbody>();
            m_cube.GetComponent<Renderer>().material.color = Color.red;
            m_cube.transform.position = new Vector3(0, 10, 0);
        }
    }
}

具体实现结果

使用Instantiate实例化方法将预制体实例化位对象

移动旋转缩放立方体

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

public class Myscript : MonoBehaviour
{
    //声明4个变量
    public GameObject myCube;
    public int transSpeed = 100;
    public float rotaSpeed = 10.5f;
    public float scale = 3;
    void OnGUI()
    {
        if (GUILayout.Button("移动立方体"))
        {
            myCube.transform.Translate(Vector3.forward * transSpeed * Time.deltaTime, Space.World);
        }
        if (GUILayout.Button("旋转立方体"))
        {
            myCube.transform.Rotate(Vector3.up * rotaSpeed, Space.World);
        }
        if (GUILayout.Button("缩放立方体"))
        {
            myCube.transform.localScale = new Vector3(scale, scale, scale);
        }
    }
}

创建之后把脚本赋给main Camera,然后在Main Camera的inspector下把创建的Cube拖到My Cube中

托的位置

摄像机的前左右运动

transform.Translate(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

第一人称漫游

创建空的GameObject给这个空的Object创建Rigidbody,Character Controller

在Rigidbody中要将Use Gravity取消勾选,勾选is Kinenmatic 这个主要时用来不受重力影响,根据脚本的路线运行

在Character Controller中

参数 描述 功能
Slope Limit 坡度限制 限制碰撞器只能爬小于等于该值的斜坡
Step Offset 台阶高度 角色可以迈上的最高台阶高度
Skin Width 皮肤厚度 皮肤厚度决定了两个碰撞器可以互相渗透的深度
Min Move Distance 最小移动距离 如果角色移动的距离小于该值,角色就不会移动
Center 中心 该值决定胶囊碰撞器在世界空间中的位置
Radius 半径 胶囊碰撞器的横截面半径
Height 高度 胶囊碰撞器的高度

目前已经解决好

//这段代码只能实现根据那个鼠标的状态去进行原地移动,已经解决
//就跟那个创建的时候差不多,这次只是把main Camera放到那个Transform里边就可以啦
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    public Transform m_transform;
    CharacterController m_ch;
    float m_movSpeed = 3.0f;
    float m_gravity = 2.0f;
    //摄像机Transform
    Transform m_camTransform;
    //摄像机旋转角度
    Vector3 m_camRot;
    //摄像机高度
    float m_camHeight = 1.4f;
    //修改Start函数,初始化摄像机的位置和旋转角度
    void Start()
    {
        m_transform = this.transform;
        m_ch = this.GetComponent<CharacterController>();
        //获取摄像机
        m_camTransform =Camera.main.transform;
        Vector3 pos = m_transform.position;
        pos.y += m_camHeight;
        m_camTransform.position = pos;
        //设置摄像机的旋转方向和主角一致
        m_camTransform.rotation = m_transform.rotation;
        m_camRot = m_camTransform.eulerAngles;
        //锁定鼠标
        Screen.lockCursor = true;
    }
    private void Update()
    {
        Contorl();
    }
    void Contorl()
    {
        //定义3个值控制移动
        float xm = 0, ym = 0, zm = 0;
        //重力运动
        ym = m_gravity * Time.deltaTime;
        //前后运动
        if (Input.GetKey(KeyCode.W))
        {
            zm += m_movSpeed * Time.deltaTime;
        }else if ( Input.GetKey(KeyCode.S)){
            zm -= m_movSpeed * Time.deltaTime;
        }
        if (Input.GetKey(KeyCode.A))
        {
            xm -= m_movSpeed * Time.deltaTime;
        }else if (Input.GetKey(KeyCode.D)){
            xm += m_movSpeed * Time.deltaTime;
        }
        //使用角色控制器提供的Move函数进行移动
        m_ch.Move(m_transform.TransformDirection(new Vector3(xm, ym, zm)));
        float rh = Input.GetAxis("Mouse X");
        float rv = Input.GetAxis("Mouse Y");
        //旋转摄像机
        m_camRot.x -= rv;
        m_camRot.y += rh;
        m_camTransform.eulerAngles = m_camRot;
        //使角色的面向方向与摄像机方向一致
        Vector3 camrot = m_camTransform.eulerAngles;
        camrot.x = 0;camrot.y = 0;
        m_transform.eulerAngles = camrot;
        //操作角色移动代码
        //使摄像机位置与角色一致
        Vector3 pos = m_transform.position;
        pos.y += m_camHeight;
        m_transform.position = pos;
 
    }
}

图形用户界面

Button

按钮分为两种:普通按钮和图片按钮

系统默认显示的按钮,呈透明状,显示白色文字,使用方法如下:

public Button button;
   private void Start()
   {
       button.onClick.AddListener(delegate () {
           Debug.Log("点击");
       });
   }

先在ui创建一个button,之后在button下add component下添加刚才写好的脚本,之后给button添加进去就可以运行了

Box

用于在屏幕上绘制一个图形化的盒子,可以显示文本内容,也可以绘制图片,或者两者同时存在

Box控件

private void OnGUI()
{
    GUI.Box(new Rect(0, 0, 100, 50),"top-left");
    GUI.Box(new Rect(Screen.width-100, 0, 100, 50),"top-Right");
    GUI.Box(new Rect(0, Screen.height-50, 100, 50),"Buttom-left");
    GUI.Box(new Rect(Screen.width-100, Screen.height-50, 100, 50),"buttom_right");
}

将脚本发连接到Main Camera上

图片

添加图片

public GUIContent content;
   private void OnGUI()
   {
       GUI.Box(new Rect(Screen.width-100, 0, 100, 50),content);
   }

Label

用于创建我呢本标签和纹理标签,和Box类似也可以显示文本内容或图片

Label

public Texture2D tectureToDisplay ;
void OnGUI()
{
    GUI.Label(new Rect(10,10,100,20), "hello world");
    GUI.Label(new Rect(10, 40, tectureToDisplay.width, tectureToDisplay.height), tectureToDisplay);
}

Bakcground Color

主要就是用来渲染GUI的背景

backgroundColor

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Color = UnityEngine.Color;

public class learn_backgroundColor : MonoBehaviour
{
    public System.Drawing.Color backgroundcolor;
    void OnGUI()
    {
        GUI.backgroundColor= Color.red;
        GUI.Button(new Rect(10, 110, 70, 30), "Button");
    }
}

这个主要是因为对于变量不清楚导致,一致在报错

Color

Background Color控件类似,都是渲染GUI颜色的但是两者不同的是Color不但会渲染GUI背景的颜色,同时还会影响GUI.Text的颜色

Color

public Color color;
void OnGUI()
{
    GUI.color = Color.yellow;
    GUI.Label(new Rect(10, 10, 100, 20),"helloworld");
    GUI.Box(new Rect(10, 50, 50, 50), "Box");
    GUI.Button(new Rect(10, 110, 70, 30), "Button");
}

这个从实际的一个角度来看,应该是属于更针对于字体颜色的一个设置,backgroundColor更加像针对于背景的一个设置,但是Color的对于那个背景也是有一定的影响的

TextField

用于绘制一个单行文本编辑框,用于可以在该单行文本编辑框中输入信息,输入内容的返回类型是String

参数 描述
position 位置及大小
maxlength 输入字符串的最大长度
text 默认显示的文本
style 使用样式

单行文本

public string str = "helloworld";
void OnGUI()
{
    str = GUI.TextField(new Rect(10, 10, 200, 20), str);
    //Debug.Log(str);
}

TextArea

用于创建多行文本编辑区,返回类型还是string

参数和参数的描述跟TextField一样

TextArea

public string str = "helloworld\nI have two lines";
    private void OnGUI()
    {
        str = GUI.TextArea(new Rect(10,10,200,100), str, 200);
        //Debug.Log(str);
    }

ScrollView

当游戏界面的内容特别多,用于超出屏幕的显示范围,就可以使用Unity3D ScrollView滚动显示界面内的全部内容

滚动条又两部分组成GUI.BeginScrollView开始滚动视图,GUI.EndScrollView 结束滚动视图

参数

参数 描述
position 位置及大小
viewRect 设置滚动整体显示范围
HorizontalScrollbar 水平滚动条
VerticalScrollbar 垂直滚动条
ScrollPosition 显示滚动位置
alwaysShowHorizontal 可选参数,总是显示水平滚动条
alwaysShowVertical 可选参数,总是显示垂直滚动条

ScrollView

public Vector2 scrollposition = Vector2.zero;
private void OnGUI()
{
    scrollposition = GUI.BeginScrollView(new Rect(10, 300, 100, 100), scrollposition, new Rect(0, 0, 220, 200));
    GUI.Button(new Rect(0, 0, 100, 20), "左上角");
    GUI.Button(new Rect(120, 0, 100, 20), "右上角");
    GUI.Button(new Rect(0, 180, 100, 20), "左下角");
    GUI.Button(new Rect(120, 180, 100, 20), "右下角");
    GUI.EndScrollView();
}

Slide

两种状态水平滚动条 GUI.HorizontalSlider;垂直滚动条GUI.VerticalSlider

参数 描述
position 位置及大小
leftValue 设置滑块左端的值
slider 用于显示拖曳区域的GUI样式
value 设置滑动条显示的值
rightValue 滑块右端的值
thumb 设置显示可多同的滑块的GUI样式

就是一个滑块在进度条上左右拖动,游戏中经常会有使用它来做英雄的血条

Slider

float hSliderValue = 0.0f;
float VSliderValue = 0.0f;
void OnGUI()
{
    hSliderValue = GUI.HorizontalSlider(new Rect(25, 25, 100, 30), hSliderValue, 0.0f, 10.0f);
    VSliderValue = GUI.VerticalSlider(new Rect(50, 50, 100, 30), VSliderValue, 10.0f, 0.0f);
}

绑定脚本的方式和那个button是一样的

ToolBar

用于创建工具栏

参数 描述
position 位置及大小
texts 显示的一组字符串
contents 显示的一组文本,图像和工具提示
selected 选择按钮的索引
images 按钮上显示的一组纹理
style 要使用的样式;如果忽略则使用GUISkin的按钮样式

ToolBar

public int toolbarint = 0;
public string[] toolbarStrings = { "toolbar1", "toolbar2", "toolbar2" };
private void OnGUI()
{
    toolbarint = GUI.Toolbar(new Rect(25, 25, 250, 30), toolbarint, toolbarStrings);
}

ToolTip

主要使用来显示提示信息

Box显示信息

button提示信息

public string tool="";
void OnGUI()
{
    GUI.Box(new Rect(5, 35, 210, 175), new GUIContent("Box", "this box has,a tooltip"));
    GUI.Button(new Rect(30, 85, 100, 20), "no tooltip here");
    GUI.Button(new Rect(30, 120, 100, 20), new GUIContent("这里有一tooltip", "The Button the box"));
    GUI.Label(new Rect(10, 40, 100, 40), GUI.tooltip);
}

Drag Windows

用于实现屏幕内可拖拽窗口的功能

参数

只有一个参数:position,设置可以拖动的窗口的一部分,这部分将被裁剪到实际的窗口中,这个可以使用鼠标拖动窗口

Drag Windows

public Rect windowsRect = new Rect(20, 20, 120, 50);
void OnGUI()
{
    windowsRect = GUI.Window(0, windowsRect,DoMyWindow, "My Windows");
}

private void DoMyWindow(int id)
{
    GUI.DragWindow(new Rect(0, 0, 10000, 20));
}

Windows

一个游戏界面可以又很多窗口组成,在每一个窗口可以添加不同的任意的功能组见,让窗口的使用丰富了游戏界面的内容

参数

参数 描述
Style 窗口的可选样式,如果不设置使用当前的GUISkin的窗口模式
clientRect 设置窗口可以拖动的一部分,这部分将被剪切到实际的窗口中
text 文本
content 窗口内渲染的图片
title 设置文本在窗口标题栏的显示
id 设置窗口饿id号(可以是任何值,只要唯一)
func 设置显示窗口内容的脚本参数,回调函数的名称
image 窗口中渲染的图像
style 设置窗口的样式信息

window控件

public Rect windowsRect0 = new Rect(20, 20, 120, 50);
public Rect windowsRect1 = new Rect(20, 100, 120, 50);
void OnGUI()
{
    GUI.color = Color.red;
    windowsRect0 = GUI.Window(0, windowsRect0, DoMyWindow, "Red window");
    GUI.color = Color.green;
    windowsRect1 = GUI.Window(1, windowsRect1, DoMyWindow, "Green window");
}

private void DoMyWindow(int id)
{
    if (GUI.Button(new Rect(20, 20, 100, 20), "helloworld"))
    {
        print("你点的窗口颜色是" + GUI.color);
        GUI.DragWindow(new Rect(0, 0, 1000, 1000));
    }
}

贴图

选中图片,将Tecture type修改成sprit render格式,然后将其加载到Hierarchy视图中

Unity3D会自动分析图片的宽和高,然后依次规格将其加载进来

Skin

用于给控件添加漂亮的皮肤

参数 含义 描述
Font 字体 用于图形界面中每一个控件使用的全局字体
Box 应用于所有盒子控件的样式
Button 按钮 应用于所有按钮控件的样式
Toggle 切换开关 应用于所有切换开关的样式
Label 标签 应用于所有标签控件的样式
TextField 文本框 应用于所有文本框的样式
TextArea 文本区域 应用于所有多行文本域控件的样式
Window 窗口 应用于所有窗口控件的样式
Horizontal Slider 水平滑动条 应用于所有水平滑动条的样式
Horizontal Slider Thunb 水平滑块 应用于所有水平滑块控件的样式
Vertical Slider 垂直滑动条 应用于所有垂直滑块条的样式
Vertical Slider Thumb 垂直滑块 应用于所有垂直滑块控件的样式
Horizontal Scrollbar 水平滚动条 应用于所有水平滚动条的样式
Horizontal Scrollbar Thumb 水平滚动条滑块 应用于所有水平滚动条滑块的样式
Horizontal Scrollbar Left Button 水平滚动条左边按钮 应用于所有水平滚动条左边按钮的样式
Horizontal Scrollbar Right Button 水平滚动条右边按钮 应用于所有水平滚动条右边按钮的样式
Vertical Scrollbar 垂直滚动条 应用于所有垂直滚动条的样式
Vertical Scrollbar Thumb 垂直滚动条滑块 应用于所有垂直滚动滑块的样式
Vertical Scrollbar Up Button 垂直滚动条顶部按钮 应用于所有垂直滚动条顶部按钮的样式
Vertical Scrollbar Down Button 垂直滚动条底部按钮 应用于所有垂直滚动条底部按钮的样式
Custom 1-20 自定义 附加的自定义样式可以应用于任何控件
Custom Styles 自定义样式 一个可以应用于任何控件的自定义样式的集合
Settings 设定 所有图形用户界面的附加设定

各种属性的解释

参数 描述
Name 控件的名称
Normal 设置文字默认显示的颜色和背景颜色
Hover 设置停留状态显示的颜色和背景颜色,可用于鼠标停留在那妞、输入框、选择框等上,但是没有点击时的显示
Active 设置激活状态的显示的颜色和背景颜色,用于按钮或者选择框点击后的显示
Focused 获得焦点状态,用于窗口的得到焦点后的显示
On Normal 默认状态,未选中状态,用于选择框控件显示的内容
On Hover 停留状态,用于选择框控件选中后文字的显示
On Active 激活状态,用于选择框控件选中时文字显示
On Focused 获得焦点状态
Border 处理边界,他不会影响在按钮平面显示的宽高
Padding 设置按钮显示的内容和按钮边缘的偏移位置
Margin 设置按钮显示的内容于边界的偏移位置
Overflow 设置按钮超出原来大小的距离
Font 设置针对于该控件的字体
Image Position 设置图片位置
Alignment 设置内容的对齐方式
Word Wrap 是否自动换行
Text Clipping 设置内容的裁剪方式
Context Offset 设置内容的偏移量
Fixed Width 设置边缘固定的宽度
Fixed Height 设置边缘固定的高度
Font Size 字体大小,默认大小为0
Font Style 字体风格
Stretch Width 是否伸展宽度
Stretch Height 是否伸展高度

Skin

public GUISkin[] s1;
public int cont = 0;
private void OnGUI()
{
    GUI.skin = s1[cont % s1.Length];
    if (s1.Length == 0)
    {
        Debug.Log("至少放一个skin到列表中");
        return;
    }
    GUI.Label(new Rect(10, 10, 100, 20), "Hello World!");
    GUI.Box(new Rect(10, 50, 50, 50), "A Box");
    GUI.Button(new Rect(10, 110, 70, 30), "A Button");
}

csdn博客参考

Skin,参考

public GUISkin myskin;
private bool choose = false;
public Rect windowRect = new Rect(20, 20, 120, 50);
public string edit = "请输入字符串";
private void OnGUI()
{
    GUI.skin = myskin;
    GUI.Button(new Rect(100, 100, 100, 100), "自定义按钮");
    choose = GUI.Toggle(new Rect(10, 50, 100, 30), choose, "单项选择");
    edit = GUI.TextField(new Rect(200, 10, 200, 20), edit, 25);
    windowRect = GUI.Window(0, windowRect, setwindow, "这是一个窗口");
}
private void setwindow(int id)
{
    GUI.DragWindow();
    GUI.Button(new Rect(10, 20, 100, 30), "小窗口自定义的按钮");
}

Toggle

用于在屏幕上绘制一个开关,通过开关的闭合来执行一些具体的指定操作,就会根据不同的切换动作来返回相应的布尔值

参数 描述
position 设置控件在屏幕上的位置及大小
image 设置控件显示的纹理图片
style 设置控件使用的样式
text 设置控件显示的文本
content 置控件的文本,图片和提示大小
value 设置开关时开启还是关闭

toggle

public Texture atexture;
private bool toggleTxt = false;
private bool toggleImg = false;
private void OnGUI()
{
    if (!atexture)
    {
        Debug.Log("请添加一个图片");
        return;
    }
    toggleTxt = GUI.Toggle(new Rect(10, 10, 100, 30), toggleTxt, "a toggle text");
    toggleImg = GUI.Toggle(new Rect(10, 50, 50, 50), toggleImg, atexture);
}

UGUI系统

灵活,快速,可视化

Canvas画布

渲染模式

Render Mode

Screen Space-Overlay渲染模式

该模式下不需要UI摄像机,UI将永远出现在所有摄像机的最前面,屏幕大小或者分辨率发生变化,画布会自动适配

参数 功能
Pixel Perfect 充值元素大小和坐标,使贴图的像素完美对应带屏幕像素上
Sort Order 排列顺序

Screen Space-Camera渲染模式

画布被放置在指定摄像机前的一个给定距离上,它支持在UI前面显示3D模型,等离子系统等内容,通过指定摄像机UI被呈现出来,画布会自定更改大小一适配屏幕

参数 功能
Pixel Perfect 重置元素大小和坐标,使贴图的像素完美对应到屏幕像素上
Render Camera UI绘制所对应的摄像机
Plane Distance UI距离摄像机镜头的距离
Sorting Layout 界面分层,越下方的层在界面显示时越在前面位置
Order Layer 界面顺序,该值越高,在姐买你显示时越在前面

World Space渲染模式

其屏幕大小将取决于拍摄的角度和相机的距离

是一个完全三维的UI,也就是把UI也当成三维对象

参数 功能
Event Camera 设置用来处理界面事件的摄像机
Sorting Layer 同上
Order Layer 同上

Event System事件系统

Event System 事件处理事件;将基于输入的世家您发送到应用程序中的对象

Standalone Input Module独立输入模块;基于InputManager管理器的状态发送事件

Touch Input Module触控输入模块

Panel

面板,实际上就是一个容器;一个面板里还可以套用其他面板

面板创建时会默认包含一个Image(Script组件)

Source Image 设置面板的图像

Color 用于改变面板的颜色

Text

文本框

参数 描述
Font 设置字体
Font Style 设置字体样式
Font Size 设置字体大小
Line Spacing 设置行间距(多行)
Rich Text 设置富文本
Alignment 设置文本在Text框中的水平以及垂直方向上的对齐方式
Horizontal Overflow 设置水平方向上溢出时的处理方式 Wrap隐藏;Overflow溢出
Vertical Overflow 设置垂直方向上溢出时的处理方式:Truncate截断;Overflow溢出
Best Fit 设置当前文字多时自动缩小以适应文本框大小
Color 设置字体颜色

Image

参数 描述
Color 设置应用在图片上的颜色
Material 设置应用在图片上的材质
Image Type 设置贴图类型

Raw Image

向用户显示了一个非交互式的图像,它可以用于装饰,图标

Raw Image控件类似于Image 控件,但是Raw Image可以显示任何纹理,而Image只能显示一个精灵

参数 描述
Texture 设置要显示的图像纹理
Color 应用在图片上的颜色
Material 设置应用在图片上的材质
UV Rect 设置图像在控件矩形中的偏移和大小,范围0~1

Button

不仅又公共的Rect Transform 与Canvas Renderer两个组件之外,Button组件默认拥有Image与Button两个组件

1、Interactable(是否启用交互)如果取消该选项,则该Button在运行时不可点击,失去了交互性

2、Transition (过渡方式)有四个选项,默认为Color Tint(颜色色彩)

·None 没有过渡方式

·Color Tint颜色过度,相关属性下面有表

·Sprite Swap 精灵交换,需要使用相同功能,不同状态的贴图,相关属性参考下文列表

·Animation 动画过渡

Color Tint属性

属性 描述
Target Graphic 设置目标对象
Normal Color 设置正常颜色
Highlighted Color 设置高亮颜色
Pressed Color 设置单击色
Disabled Color 设置禁用色
Color Multiplier 设置颜色倍数
Fade Duration 设置变化持续的时间

Sprite Swap

参数 描述
Target Graphic 设置目标图像
Highlight Sprite 设置鼠标经过时的贴图
Pressed Sprite 设置鼠标单击是的贴图
Disabled Sprite 设置禁用时的贴图

Toggle

参数 列表
Is On 设置复选框默认是开还是关
Toggle Transition 设置渐变效果
Graphic 用于切换背景,更改为一个更合适的图像
Group 设置多选组

实现group中实现多个toggle单选

创建一个空物体添加Add Component添加Toggle Group;

创建多个toggle将刚才创建的Toggle Group放入toggle group;之后将刚才创建的toggle拖到刚才的空物体下,这样就实现了单选框

Slider

Slider需要注意的是参数Whole Number该参数表示滑块是否只为整数

参数 描述
Fill Rect 设置填充矩形区域
Handle Rect 设置手柄矩形区域
Direction 设置Slider的摆放方向
Max Value 设置最大数值
Min Value 设置最小数值
Value 设置滑块当前的数值

ScrollBar

滚动控件可以垂直或者水平放置;最大值就是1(100%),最小值是0(0%)

参数 描述
Handle Rect 设置最大值和最小值之间的范围
Direction 设置滑动条的方向为从左到右,从上至下,或者其他方向
Value 设置当前滚动条对应的值
Size 设置操作条矩形对应的缩放长度,取值0~1
Numbers Of Steps 设置滚动条可滚动的位置数目
On Value Changed 设置值改变时触发消息

Input Field

也有Image组件另外包括Transition属性,其默认是Color Tint

Input_Field

另外两个特殊的参数

Content Type输入域内容类型,包括数字密码等

1、Standard 允许输入任何字符

2、Autocorrected自动校正输入的未知单词

3、Integer Number只允许输入整数

4、Decimal Number 允许输入整数和小数

5、Alpha numeric允许输入数字和字母

6、Name 允许输入英文及其他文字

7、Email Address允许输入一个由最多一个@符号组成字母数字字符串

8、Password 输入字符被隐藏,只显示星号

9、Pin只允许输入整数,输入字符被隐藏,只显示星号

10、Custom 允许用户定义类型,输入类型,键盘类型,字符验证

Line Type设置当输入内容超过边界时的换行方式

1、Single Line 超过边界也不换行,继续向右延伸此行

2、Muhi Line Submit 允许文本换行,只在需要的时候换行

3、Muti Line Newline 允许文本换行,用户可以按回车健来换行

UGUI实例展示

(5条消息) Unity3D界面按钮跳转(最新)_敏捷的山峰的博客-CSDN博客_unity页面跳转

地形

Resolution属性面板的参数列表

参数 含义 描述
Terrain Width 地形宽度 全局地形总宽度
Terrain Length 地形长度 全局地形总长度
Terrain Height 地形高度 全局地形允许的最大高度
Heightmap Resolution 高度分辨率 全局地形生成的高度图的分辨率
Detail Resolution 细节分辨率 全局地形生成的细节贴图的分辨率
Detail REsolution Per Patch 每个地形快的网格分辨率 全局地形中每个地形快的网格分辨率
Control Texture Resolution 控制纹理的分辨率 把地形贴图绘制地形上时所使用的贴图分辨率
Base Texture Resolution 基础纹理的分辨率 远处地形贴图的分辨率

编辑地形有两种方法

通过地形编辑器编辑地形

通过导入一幅预先渲染好的灰度图来快速地为地形建模

物理引擎

刚体 Rigidbody

通过参数来控制物体的各种物理状态,可控制的参数有

Mass质量;Drag阻力;Angular Drag角阻力;Use Gravity是否使用重力;Is Kinematic 是否受物理影响;

interpolate 插值;Collision Detection碰撞检测;Constraints约束

截图

碰撞体Collider

触发器Trigger

力Constant Force

角色控制器Charactor Controller

参数 含义 描述
Slope Limit 坡度限制 控制对象的爬坡的高度
Step Offset 台阶高度 可以迈上的最大台阶高度
Skin Width 皮肤厚度 两个碰撞体碰撞后相互渗透的程度
Min Move Distance 最小移动距离 最小移动值
Center 中心 在世界坐标中的位置
Radius 半径 设置碰撞体的碰撞半径
Height 高度 设置碰撞体的碰撞高度

代码过程中的问题

在之前会又代码给mainCamera然后没有办法给那个脚本添加public定义的参数,比如立方体呀什么的

解决:先将脚本分配给对应的物体,然后在物体之下的inspector中找到该脚本在将物体拖拽过来就可以添加public定义的参数

在脚本放置到物体上的时候不要着急,要等他解析一会,出来定义的public参数之后才能运行

Rect(左边框距离,上边框距离,宽,高)

将图片转化成精灵

在图片的Inspector中的Texture Type改成 Sprite(2D and UI)然后点击下面的apply就完成了转化

资源

Standard Assets (for Unity 2018.4) | 资源包 | Unity Asset Store


文章作者: 毛豆不逗比
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 毛豆不逗比 !
  目录
{% include '_third-party/exturl.swig' %} {% include '_third-party/bookmark.swig' %} {% include '_third-party/copy-code.swig' %} + {% include '_custom/custom.swig' %}