您的位置:首页 > 其它

Roll a Ball 游戏教程学习笔记(一)初始设置

2018-01-30 19:28 176 查看
在为场景添加东西之前,先保存场景。保存场景可以再file-->save sence保存到Assets文件夹下,新建名为_Sence文件夹,场景名字为MiniGame

新建plane,重命名Ground。使用transform的下拉菜单重设(reset)变换组件,讲对象放置在场景中间。选中场景物体按住F键或者在edit菜单中的frame selected。将摄像机对准整个场景。取消网格线,在gizmos中取消选中show grid。

改变plane大小,在transform中改数字,tab键,在x,y,z中变换。plane没有体积,y轴正向无效,负向就是向下显示,向下显示时,在正面看不到。如果设置一个plane,但是没看到plane,要检查plane的y轴和摄像机

创建一个小球,放到原点(reset),在edit菜单中的frame selected或者鼠标放在场景中按住F让摄像机聚焦在小球上,将球移到平面上

给背景加颜色,想要给模型(model)添加颜色或者纹理(texture),要用到材质(material)。在项目中新建一个文件夹Materials用于放置材质,然后在这个文件夹里创建材质background,选择background,看inspector中的main maps,第一个属性是albido,改颜色。给plane弄上这个贴图需要选中项目中的视图中的材质,然后拖拽到场景视图的平面plane上。要预览材质的话要确保预览窗口是打开的,预览窗口在inspector最下面。

旋转主光源,选中directional light,然后改变transform组件中rotation属性的Y值,改成为倾斜角45度。

改变名字,双击物品(中间停格一下)

想要小球滚动装在墙上不飞出去,希望收集一些可以收集的物品。这个时候需要物理系统,需要游戏对象和刚体组件关联,要关联一个新的组件,需要先选中要关联的游戏对象。然后component-->physics-->rigid body这样就能关联到选中的游戏对象,使物体拥有刚体组件。

要玩家对象在控制下移动,获取玩家的键盘输入,并把这些输入装换成对球的作用力。要写一个脚本,首先在project中新建一个文件夹scripts用于存放脚本,然后新建C#脚本。选中对象,在Add Component中增加new script,脚本命名为PlayerControl。这种新建脚本的方法会把脚本生成在项目视图的根目录下。

打开代码,删除示例代码。

我们想每一帧都检测用户的输入,然后将每一帧的输入都作用与游戏对象上。那么。在哪检测输入呢?两种方法

update,fixed update):

update在每一帧展示之前被调用,而fixed update是在进行任何物理计算之前被调用。物理代码在这里执行。

我们需要知道input,但如何知道更多呢?

Input.GetAxis 获取轴:GetAxis 是个方法,需要传参数,参数为string类型,参数如下:

            一:触屏类

                   1.Mouse X                       鼠标沿着屏幕X移动时触发

                   2.Mouse Y                       鼠标沿着屏幕Y移动时触发

                   3.Mouse ScrollWheel      当鼠标滚动轮滚动时触发

            二:键盘操作类

                   1.Vertical                        对应键盘上面的上下箭头,当按下上或下箭头时触发

                   2.Horizontal                    对应键盘上面的左右箭头,当按下左或右箭头时触发

// A very simplistic car driving on the x-z plane.
// 一个十分简单的在x-z平面的驾车例子
var speed : float = 10.0;
var rotationSpeed : float = 100.0;

function Update () {
// Get the horizontal and vertical axis.
//获取横向和纵向坐标轴
// By default they are mapped to the arrow keys.
//默认情况下他们关联到方向键上
// The value is in the range -1 to 1
//值的范围是在-1到1之间
var translation : float = Input.GetAxis ("Vertical") * speed;
var rotation : float = Input.GetAxis ("Horizontal") * rotationSpeed;

// Make it move 10 meters per second instead of 10 meters per frame...
// 使它每帧移动10米变为每秒移动10米...
translation *= Time.deltaTime;
rotation *= Time.deltaTime;

// Move translation along the object's z-axis
//沿着z轴平移对象
transform.Translate (0, 0, translation);
// Rotate around our y-axis
//以我们的y轴为中心旋转
transform.Rotate (0, rotation, 0);
}

Rigidbody.AddForce 添加力:添加一个力到刚体。作为结果刚体将开始移动

using UnityEngine;

public class ExampleClass : MonoBehaviour
{
public float thrust;
public Rigidbody rb;

void Start()
{
rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
rb.AddForce(transform.forward * thrust);
}
}

如何让对象引用不同的组件?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: