Unity3D和Flash一样,甚至和C#一样。 拖拽完组件后,编写一系列脚本,完成编程。 甚至可以说,它是带有编程脚本的3DSMAX。 那么如何完成最基本的物体和材质设置、物体位移和旋转呢? 我们用一个简单的Unity3D来说明这个问题,如下图:
一个面板上有一个可控的立方体和两个不可控的球体以及两个立方体,然后可以控制立方体的位移和旋转。 我不会写下概念性的东西。 具体步骤如下。
1.场景设置
1、如下图所示,在GameObject中,选择自己需要的,拖到场景上,创建对应的物体。
除了默认的相机和光源之外,我们还需要设置3个立方体、2个球和1个地面。
设置时还可以使用CTRL+C、CTRL+V复制粘贴Paint、Flash、C#等对象。
2. 之后,单击任意对象,然后使用右侧的检查器设置相应的属性。 这不是和C#设置控件的基本控制以及Flash中资源属性的设置是一样的吗?
不过,由于3D界面并不像2D那样容易控制组件的位置unity 模型旋转,所以基本上我们需要直接在Inspector界面的Transform项中输入坐标来控制对象的位置。
如下图所示(在材质设置之前,这些东西应该是白色的)。 默认情况下,Y 为平面的上下方向,XZ 为平面的垂直和水平方向。 这就是公认的三维笛卡尔坐标系设置。 没什么可说的。 。
各组件的坐标Position、Rotation、Scale如下图所示。 位置是指坐标,即物体中心点的位置,因此如果要将物体放置在Plane上,则必须位于Y轴0.5的位置。 旋转是指物体绕轴旋转的角度。 比例是单位对象的 XYZ。 轴半径沿该轴加宽了多少。
理论上,GameObject 中所有单元的实体都会偏移不同的坐标。 角度偏移和变形可以代表三维世界中的一切,就像二维世界中的一切都是由点、直线和曲线组成的一样。
3、物体设置好之后unity 模型旋转,我们需要给每个物体上色,也就是给每个物体附加材质。 这里不要有windows自带彩色版本的惯性思维。 “颜色”也是一种材料。 它不只是存在。 可以直接在 Inspector 中设置。 我们需要自己创建它。 详情如下所示:
以上只是简单的纯色材质设置。 材质设置也是3D领域的一门知识,就像如何使用HTML+CSS配色来创建网页一样。
这里设置材质只是一个基本的介绍。 这方面以后绝对可以深入研究。
现在游戏美术师紧缺,收入高就是因为这个。 材质可以说是2D艺术家的3D版本。
言归正传,如图所示,将黑色材质设置为地板,蓝色材质设置为预设为不可移动的物理游戏图片,红色材质设置为我们当中的主角。
4. 至此,场景终于布置完毕。 如下图所示,选择各个物体(2个球体,3个立方体),【Component】->【Physics】->【Rigidbody】,将所有物体设置为刚体,以便真正的物理碰撞后,可以编写脚本。
2.剧本编写
显然这些按钮是通过脚本创建的。
如何创建新脚本在《[Unity3D]Helloworld》(点击打开链接)中已有介绍,这里不再赘述。
将以下脚本交给中间的红色立方体。
using System.Collections;
using System.Collections.Generic;
using UnityEngine.SceneManagement;//重新开始游戏,切换场景SceneManager.LoadScene("Scene1");需要。
using UnityEngine;
public class script : MonoBehaviour
{
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
}
//初始化变换方法。
public Transform transform;
void Awake()
{
transform = this.GetComponent();
}
float moveSpeed = 20;//物体移动速度
void OnGUI()//OnGUI用于画面绘制
{
//这里的rect就是指在左上角坐标(10,10)这个100x30像素的区域位置。
if (GUI.Button(new Rect(10, 10, 100, 30), "向左旋转30度"))//GUI.Button用于创建按钮
{
transform.Rotate(-Vector3.up * 30);//30就是指30度
}
if (GUI.Button(new Rect(110, 10, 100, 30), "向右旋转30度"))
{
transform.Rotate(Vector3.up * 30);
}
if (GUI.Button(new Rect(210, 10, 100, 30), "重新开始"))
{
SceneManager.LoadScene("Scene1");//Application下的方法已经被标识过期
}
if (GUI.Button(new Rect(10, 50, 100, 30), "向上移动"))
{
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
}
if (GUI.Button(new Rect(110, 50, 100, 30), "向下移动"))
{
transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);//Time.deltaTime指一帧时间,这样据说可以平滑视觉差
}
if (GUI.Button(new Rect(210, 50, 100, 30), "向左移动"))
{
transform.Translate(-Vector3.right * moveSpeed * Time.deltaTime);
}
if (GUI.Button(new Rect(310, 50, 100, 30), "向右移动"))
{
transform.Translate(Vector3.right * moveSpeed * Time.deltaTime);
}
GUI.Label(new Rect(10, 100, 400, 30), "模型位置" + transform.position);//transform.position可以获取模型位置
}
}
详情请参阅注释。
Unity3D中没有向后移动或向左移动橙光游戏,它们统一用负.forward和负.right来实现。
Vector3无需初始化即可直接使用。 它通常指分配给脚本的对象。
SceneManager.LoadScene("场景1"); Unity3D内部调试时,由于场景重置,灯光会变暗,但发布到exe后就不存在此问题。
文章来源:https://blog.csdn.net/yongh701/article/details/70161237