Unity3d开发

2022-08-18 16:25:19 浏览数 (1)

初识

学习地址总结

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两种浮点类型

代码语言:javascript复制
float angles=36.5f;
double rate=0.253D;

类型

说明

取值范围

float

32位单精度浮点类型

-的2的128次方~2的128次方

double

64位双精度浮点类型

-的2的1024次方~2的1024次方

3、布尔类型
代码语言:javascript复制
bool b=true;
4、字符类型(char)

转义字符

含义

转义字符

含义

'

单引号

f

换页

"

双引号

n

换行

反斜线

r

回车

t

水平制表符

a

报警

v

垂直制表符

b

空格

5、引用类型

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

6、枚举类型
代码语言:javascript复制
enum 枚举类型名称
{
    常量1=值1;
    常量2=值2;
    ...
   	常量n=值n;
}

变量声明

修饰符的添加

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

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

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

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

语句

分支语句
代码语言:javascript复制
if (表达式){
    语句1
}else{
    语句2
}
###########
switch(值)
{
    case 值1:语句1;
        break;
    case 值n:语句n;
        break;
}
循环
代码语言:javascript复制
do{
    语句
}while(条件);
while(条件){
    语句
}
for(int i=1;i<=10;i  ){
    Console.WriteLine("{0},i")
}
函数

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

代码语言:javascript复制
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模型的创建

创建脚本输入代码

代码语言:javascript复制
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实例化方法将预制体实例化位对象

移动旋转缩放立方体

代码语言:javascript复制
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中

摄像机的前左右运动

代码语言:javascript复制
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

高度

胶囊碰撞器的高度

目前已经解决好

代码语言:javascript复制
//这段代码只能实现根据那个鼠标的状态去进行原地移动,已经解决
//就跟那个创建的时候差不多,这次只是把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

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

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

代码语言:javascript复制
public Button button;
   private void Start()
   {
       button.onClick.AddListener(delegate () {
           Debug.Log("点击");
       });
   }

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

Box

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

代码语言:javascript复制
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上

图片

代码语言:javascript复制
public GUIContent content;
   private void OnGUI()
   {
       GUI.Box(new Rect(Screen.width-100, 0, 100, 50),content);
   }

Label

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

代码语言:javascript复制
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的背景

代码语言:javascript复制
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的颜色

代码语言:javascript复制
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

使用样式

代码语言:javascript复制
public string str = "helloworld";
void OnGUI()
{
    str = GUI.TextField(new Rect(10, 10, 200, 20), str);
    //Debug.Log(str);
}

TextArea

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

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

代码语言:javascript复制
public string str = "helloworldnI 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

可选参数,总是显示垂直滚动条

代码语言:javascript复制
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样式

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

代码语言:javascript复制
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的按钮样式

代码语言:javascript复制
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

主要使用来显示提示信息

代码语言:javascript复制
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,设置可以拖动的窗口的一部分,这部分将被裁剪到实际的窗口中,这个可以使用鼠标拖动窗口

代码语言:javascript复制
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

设置窗口的样式信息

代码语言:javascript复制
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

是否伸展高度

代码语言:javascript复制
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博客参考

代码语言:javascript复制
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

设置开关时开启还是关闭

代码语言:javascript复制
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画布

渲染模式

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

另外两个特殊的参数

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

0 人点赞