unity3d入门 Demo 学习记录

  闲来学习一下 unity3d 的Demo,记录如下。

官方 Demo,名字为 Roll-A-Ball,如图

  

  场景比较简单,包含地面、玩家精灵、主摄像机、墙壁、可拾取的方块、分数为示 text、平行光源。

  资源目录下,包含材质、预制件、脚本。

  材质:定义了背景、小方块所需的材质。

  预制件:场景中共有12个小方块,所以先做一个 PickUp 的预制件。制作一个预制件,先向场景中创建一个3d对象cube,为该cube对象添加钢体组件、脚本组件,然后把该 cube 对象拖进一个空的预制作,这样便可方批量创建,现在向场景再拖入11个该预制件。

  脚本:摄像机脚本、玩家精录脚本、自转脚本。脚本是这个小游戏灵魂,控制各移动逻辑,下面会详述。

一、Rotator.cs 脚本绑定到小方块预制件:

using UnityEngine;

using System.Collections;

public class Rotator : MonoBehaviour {

// Before rendering each frame..

void Update ()

{

// Rotate the game object that this script is attached to by 15 in the X axis,

// 30 in the Y axis and 45 in the Z axis, multiplied by deltaTime in order to make it per second

// rather than per frame.

transform.Rotate (new Vector3 (15, 30, 45) * Time.deltaTime);

}

}    
核心就一句代码,绑定该脚本的GameObject每秒 绕指定轴旋转。

二、CameraController.cs脚本绑定到摄像机。

using UnityEngine;

using System.Collections;

public class CameraController : MonoBehaviour {

// store a public reference to the Player game object, so we can refer to it‘s Transform

public GameObject player;

// Store a Vector3 offset from the player (a distance to place the camera from the player at all times)

private Vector3 offset;

// At the start of the game..

void Start ()

{

// Create an offset by subtracting the Camera‘s position from the player‘s position

offset = transform.position - player.transform.position;

}

// After the standard ‘Update()‘ loop runs, and just before each frame is rendered..

void LateUpdate ()

{

// Set the position of the Camera (the game object this script is attached to)

// to the player‘s position, plus the offset amount

transform.position = player.transform.position + offset;

}

}

在Start方法中,记下摄像机与玩家精灵的距离差值,在LateUpdate方法中更新摄像机的位置,使摄像机跟随玩家精录的移动。

三、PlayerController.cs绑定到 player 对象。

using UnityEngine;

// Include the namespace required to use Unity UI

using UnityEngine.UI;

using System.Collections;

public class PlayerController : MonoBehaviour {

// Create public variables for player speed, and for the Text UI game objects

public float speed;  //精灵移动速度

public Text countText;//分数 Text

public Text winText;//胜利 Text

// Create private references to the rigidbody component on the player, and the count of pick up objects picked up so far

private Rigidbody rb;//精灵本身绑定的钢体对像

private int count;//分数记数

// At the start of the game..

void Start ()

{

// Assign the Rigidbody component to our private rb variable

rb = GetComponent<Rigidbody>();//钢体对象附值

// Set the count to zero

count = 0;//初始化分数

// Run the SetCountText function to update the UI (see below)

SetCountText ();//设置初始化文本

// Set the text property of our Win Text UI to an empty string, making the ‘You Win‘ (game over message) blank

winText.text = "";

}

// Each physics step..  处理输入

void FixedUpdate ()

{

// Set some local float variables equal to the value of our Horizontal and Vertical Inputs

  //取得键盘输入的 x 方向、y方向

float moveHorizontal = Input.GetAxis ("Horizontal");

float moveVertical = Input.GetAxis ("Vertical");

  //x 方向、y 方向组成方向向量

// Create a Vector3 variable, and assign X and Z to feature our horizontal and vertical float variables above

Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

// Add a physical force to our Player rigidbody using our ‘movement‘ Vector3 above,

// multiplying it by ‘speed‘ - our public player speed that appears in the inspector

  //给精灵的钢体对象一个该方向向量上的、大小为 speed 的力

rb.AddForce (movement * speed);

}

// When this game object intersects a collider with ‘is trigger‘ checked,

// store a reference to that collider in a variable named ‘other‘..

 //处理碰撞逻辑

void OnTriggerEnter(Collider other)

{

// ..and if the game object we intersect has the tag ‘Pick Up‘ assigned to it..

  //与精灵碰撞的对象,如果 tag 是 Pick Up,那么隐藏,同时记数+1,更新文本显示

if (other.gameObject.CompareTag ("Pick Up"))

{

// Make the other game object (the pick up) inactive, to make it disappear

other.gameObject.SetActive (false);

// Add one to the score variable ‘count‘

count = count + 1;

// Run the ‘SetCountText()‘ function (see below)

SetCountText ();

}

}

// Create a standalone function that can update the ‘countText‘ UI and check if the required amount to win has been achieved

 // 文本更新方法,胜利判定逻辑

void SetCountText()

{

// Update the text field of our ‘countText‘ variable

countText.text = "Count: " + count.ToString ();

// Check if our ‘count‘ is equal to or exceeded 12

if (count >= 12)

{

// Set the text value of our ‘winText‘

winText.text = "You Win!";

}

}

}

原文地址:https://www.cnblogs.com/xingchong/p/9822512.html

时间: 2024-10-04 17:24:28

unity3d入门 Demo 学习记录的相关文章

Python入门基础学习记录(二)汇率案例学习记录

一.汇总整理 1.操作 ①新建python文件 工程右键--new--python file 2.注意问题与知识点 >变量定义:直接写变量名即可,例如定义一个字符串并赋值123: rmb_str = ‘123’.特别需要注意的,python对格式的要求,等号左右要有空格 >代码缩进:python中没有类似C#.java等以花括号或其它开始结束定界符来区分代码块,缩进是标识语句块的唯一方法,一个语句块中的所语句必须使用相同的缩进,表示一个连续的逻辑行序列.注意:原文件的第一行不需要缩进,不可以用

[Unity3D]做个小Demo学习Input.touches

[Unity3D]做个小Demo学习Input.touches 学不如做,下面用一个简单的Demo展示的Input.touches各项字段,有图有真相. 本项目已发布到Github,地址在(https://github.com/bitzhuwei/AndroidTouchDemo). 制作Demo 很简单,只需拉一个Text,然后添加一个脚本. 脚本如下. 1 using UnityEngine; 2 using System.Collections; 3 4 public class Disp

redis入门学习记录(二)

继第一节 redis入门学习记录(一)之后,我们来学习redis的基本使用. 接下来我们看看/usr/local/redis/bin目录下的几个文件作用是什么? redis-benchmark:redis性能测试工具 redis-check-aof:检查aof日志的工具 redis-check-dump:检查rdb日志的工具 redis-cli:连接用的客户端 redis-server:redis服务进程 1.使用redis的客户端操作 我们现在往redis存储一个key = value  的数

lucene学习记录(一)--lucene demo的学习

敬伟大的实践出真知! 以前研究过全文检索,不过当时重点放在了使用上,而且当时重点放在了基于lucene之上的工具zoie,没有时间好好研究一下真正的实现内容.故现在闲暇时间好好看看官网,研究一下lucene这个全文检索的根.由于水平有限,很多地方比较浅显而且可能会有错误,请看官海涵,敬请指正! 本篇文章直接跳过lucene的各种介绍,援引等等,直接从lucene自带的demo开始记录. 我使用的lucene版本是4.10.2.下载地址:下载,因为我使用的Windows环境,故直接下载了zip包,

mybaits入门demo映射文件详解(三)

第二篇文章:  mybaits入门demo配置文件详解(二) Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码.MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好. SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): cache – 给定命名空间的缓存配置. cache-ref –

Python学习记录day1

Python学习记录博客是本人记录学习python3过程中的一些记录和过程,日后也可以帮助自己温习. python优点: 1.Python入门简单,功能强大,适用性强: 2.开发效率高,第三方库强大且多: 3.Python无需考虑底层细节: 4.可移植性,跨平台: 5.可扩展性: 6.可嵌入性,Pthon可嵌入到C/C++程序中: python缺点: 1.速度慢,Python比C慢很多,比java也慢一点: 2.代码不能加密,源码是明文: 3.线程不能利用多 CPU 问题: python版本2和

Unity3D for VR 学习(6): 再次温故知新-3D数学

一年前,系统学习过3D数学,并记录了一篇博客<C#程序员整理的Unity 3D笔记(十):Unity3D的位移.旋转的3D数学模型>. 一年后,再次温习之. 坐标系:Unity3D使用左手笛卡尔坐标系(Descartes coordinate system) 世界坐标系(world space):在一个游戏场景中,唯一. 物体坐标系\局部坐标系(local\Object space):每个物体有各自的独立的坐标系.如桌子的物体坐标系中,扶手相对桌子腿位置.有时候,不需要对外暴漏太多细节. 摄像

jQuery Moblile Demos学习记录Theming、Button、Icons图标,脑子真的不好使。

jQuery Moblile Demos学习记录Theming.Button.Icons图标,脑子真的不好使. 06. 二 / Jquery Mobile 前端 / 没有评论 本文来源于www.ifyao.com禁止转载!www.ifyao.com 一CSS Framework块 Theming 是一个整体了解默认主题和内置的A-E主题各个效果.待解决问题,自定义主题,下边是一个知识点. http://www.w3cschool.cc/jquerymobile/jquerymobile-them

jQuery Moblile Demos学习记录Panel

jQuery Moblile Demos学习记录Panel 11. 二 / Jquery Mobile / 没有评论 本文来源于www.ifyao.com禁止转载!www.ifyao.com 我就简短的总结一下: Panel位置:data-position属性控制:值:left,right, 显示方式:data-display属性   值:reveal默认在页面之下,overlay页面上,push和页面统一,将页面推开. Panel应该放在header,content,footer之前或者之后,