前言:实现小鸟的动画,之前吐槽过js写U3D,就改成了C#来写,没想到遇到问题了。

实现的效果

using UnityEngine;
using System.Collections; /// <summary>
/// 2D动画组件
/// </summary>
public class aniSprite : MonoBehaviour
{ /// <summary>
/// 是否启动2D动画
/// </summary>
public bool isUsed = false; /// <summary>
/// 动画的时间(0表示永远运行)
/// </summary>
public float timeLength = ; /// <summary>
/// 动画有多少列(动画多个图片)
/// </summary>
public int columnSize; /// <summary>
/// 动画有多少行
/// </summary>
public int rowSize; /// <summary>
/// 起始帧从那列开始
/// </summary>
public int colFrameStart; /// <summary>
/// 起始帧从那行开始
/// </summary>
public int rowFrameStart; /// <summary>
/// 总共多少帧
/// </summary>
public int totalFrames = ; /// <summary>
/// 每秒运行多少帧动画
/// </summary>
public int framePerSecond; /// <summary>
/// 总共运行多长时间
/// </summary>
public int totalTime; /// <summary>
/// 设置运行多长时间
/// </summary>
private float myTime = ; private float myTimeLength = ; /// <summary>
/// 是否运行
/// </summary>
private bool isPlay = true; /// <summary>
/// 2D
/// </summary>
private Vector2 size; /// <summary>
/// 2D 设置
/// </summary>
private Vector2 offSet; private int u; // Use this for initialization
void Start()
{ } // Update is called once per frame
void Update()
{
if (isUsed)
{
AniSprit(columnSize, rowSize, colFrameStart, rowFrameStart, totalFrames, framePerSecond, totalTime, true);
}
myTimeLength += Time.deltaTime;
if (timeLength != && myTimeLength > timeLength)
{
Destroy(gameObject);
}
} /// <summary>
/// 动画组件(坦克游戏)
/// </summary>
/// <param name="columnSize">动画有多少列</param>
/// <param name="rowSize">动画有多少行</param>
/// <param name="colFrameStart">起始帧从那列开始</param>
/// <param name="rowFrameStart">起始帧从那行开始</param>
/// <param name="totalFrames">总共多少帧</param>
/// <param name="framePerSecond">每秒运行多少帧动画</param>
/// <param name="totalTime">总共运行多长时间</param>
/// <param name="moveDirection">运动方向</param>
/// <returns></returns>
bool AniSprit(int columnSize, int rowSize, int colFrameStart, int rowFrameStart, int totalFrames, int framePerSecond, int totalTime, bool moveDirection)
{
myTime += Time.deltaTime;//累积时间
if (totalTime != && myTime > totalTime)//游戏停止运行
{
isPlay = false;
myTime = ;//重新计时
return isPlay;
}
int index = (int)(myTime * (framePerSecond - ));//-1:去掉一个缩影
index = index % totalFrames;
int v = index / columnSize;
if (moveDirection)
{
size = new Vector2( / columnSize, / rowSize);
u = index % columnSize;
}
else
{
size = new Vector2(- / columnSize, / rowSize);
u = -index % columnSize;
}
offSet = new Vector2((u + colFrameStart) * size.x, ( - size.y) - (v + rowFrameStart) * size.y);
renderer.material.mainTextureOffset = offSet;
renderer.material.mainTextureScale = size;
return true;
}
}

注意小鸟图片显示时设置好Tiling为1/3=0.33 否则会显示3只鸟,这个也和css样式中设置图片一样。

1、发现运行起来Game中就是没“鸟”

这个问题真的是折腾了我半天,为了找个“鸟” 我直接pass刚才做的,把视频从头在看一遍又一遍再做一遍,结果还是这样没“鸟”……排除了深度问题和其他可能的问题后,发现U3D断点也许能找到答案

2、Unity3D 如何设置断点?

  vs2012里面断点不进去,(vs2010也试过不行)

  2.1、在Mono中选择Run-Attach to Process

  

  2.2、附件到进程中

  

  2.3、Mono变成可调式状态

  

  2.4、在Unity3D中启动你的游戏,设置好你需要的断点即可。发现问题在这:

  这是C#版本  

  

  这是js版本

  

js代码

#pragma strict

var isUsed:boolean=false;
var timeLength:float=0;
var columnSize:int;
var rowSize:int;
var colFrameStart:int;
var rowFrameStart:int;
var totalFrames:int=1;
var framePerSecond:int;
var totalTime:float=1; private var myTime:float=0;
private var myTimeLength:float=0;
private var isPlay:boolean=true;
private var size:Vector2;
private var offSet:Vector2;
private var u:int; function Start () { } function Update () {
if(isUsed){
AniSprit(columnSize, rowSize , colFrameStart , rowFrameStart , totalFrames ,framePerSecond ,totalTime ,true);
}
myTimeLength+=Time.deltaTime;
if(timeLength!=0&&myTimeLength>timeLength){
Destroy(gameObject);
}
}
/// <summary>
/// 动画组件(坦克游戏)
/// </summary>
/// <param name="columnSize">动画有多少列</param>
/// <param name="rowSize">动画有多少行</param>
/// <param name="colFrameStart">起始帧从那列开始</param>
/// <param name="rowFrameStart">起始帧从那行开始</param>
/// <param name="totalFrames">总共多少帧</param>
/// <param name="framePerSecond">每秒运行多少帧动画</param>
/// <param name="totalTime">总共运行多长时间</param>
/// <param name="moveDirection">运动方向</param>
/// <returns></returns>
function AniSprit( columnSize:int, rowSize:int, colFrameStart :int, rowFrameStart:int, totalFrames:int,framePerSecond:int,totalTime:int,moveDirection:boolean)
{
myTime+=Time.deltaTime;//累积时间
if(totalTime!=0&&myTime>totalTime){
isPlay=false;
myTime=0;
return isPlay;
}
var index:int=myTime*(framePerSecond-1);
index=index%totalFrames;
var v=index/columnSize;
if(moveDirection){
size=Vector2(1.0/columnSize,1.0/rowSize);
u=index%columnSize;
}
else{
size=Vector2(-1.0/columnSize,1.0/rowSize);
u=-index%columnSize;
} offSet=Vector2((u+colFrameStart)*size.x,(1.0-size.y)-(v+rowFrameStart)*size.y);
renderer.material.mainTextureOffset=offSet;
renderer.material.mainTextureScale=size;
return true;
}

  当局者迷啊,只能自我安慰了,实在不仔细!万幸的是解决了问题。要认真!要细心!下面继续下去。。。。

birdMove C#

using UnityEngine;
using System.Collections; /// <summary>
/// 小鸟弹跳
/// </summary>
public class birdMove : MonoBehaviour
{ /// <summary>
/// 是否掉在地上
/// </summary>
private bool isGround = false; /// <summary>
/// 0-1随机变量
/// </summary>
private float randomNumber; /// <summary>
/// 多少秒跳一次
/// </summary>
public float seconds;
// Use this for initialization
void Start()
{
InvokeRepeating("Move", , seconds);//定时重复处理
} // Update is called once per frame
void Update()
{
if (!isGround)
{
if (randomNumber > 0.5f)
{
//transform.localEulerAngles.z += Time.deltaTime * 400;
transform.localEulerAngles = new Vector3(transform.localEulerAngles.x, transform.localEulerAngles.y, Time.deltaTime * * transform.localEulerAngles.z);
//transform.Rotate(new Vector3(transform.localRotation.x, transform.localRotation.y, transform.localRotation.z + Time.deltaTime * 100f));
//x、y、z角代表绕z轴旋转z度,绕x轴旋转x度,绕y轴旋转y度(这个顺序)。
}
else
{
transform.localEulerAngles = new Vector3(transform.localEulerAngles.x, transform.localEulerAngles.y, -Time.deltaTime * * transform.localEulerAngles.z);
//transform.localEulerAngles.z -= Time.deltaTime * 400;
}
}
if (slingShot.isJump)
{ }
} void Move()
{
//transform.rigidbody.velocity.y =2.0f ;// [və'lɒsətɪ]速率,速度
transform.rigidbody.velocity = new Vector3(transform.rigidbody.velocity.x, 2.0f, transform.rigidbody.velocity.z);
isGround = false;
randomNumber = Random.Range(, );
}
/// <summary>
/// 进入碰撞
/// 当collider/rigidbody开始触动另一个rigidbody/collider时OnCollisionEnter被调用。
/// </summary>
/// <param name="collision"></param>
void OnCollisionEnter(Collision collision)
{
isGround = true;
new Vector3(transform.localEulerAngles.x, transform.localEulerAngles.y, );
//transform.localEulerAngles.z = 0;// 使得小鸟正对前方 Euler Angles欧拉角
}
}

Move.js

#pragma strict
/// <summary>
/// 小鸟弹跳
/// </summary> private var isGround:boolean=false;//是否掉在地上 private var randNumber:float; var seconds:float; function Start () {
InvokeRepeating("Move",2,seconds);//2s定时重复处理
} function Update () {
if(!isGround){
if(randNumber>0.5){
transform.localEulerAngles.z+=Time.deltaTime*400;
}else{
transform.localEulerAngles.z-=Time.deltaTime*400;
}
} //
} function Move(){
transform.rigidbody.velocity.y=2.0;//bird1向上的速度
isGround=false;//向上了 所以ground为false
randNumber=Random.Range(0,1.0);
} function OnCollisionEnter(collision:Collision){
isGround=true;
transform.localEulerAngles.z=0;// 使得小鸟正对前方 Euler Angles欧拉角
}

小鸟在旋转时C#代码还是有瑕疵,以js为主

重点L::

  C#不能给每个参数单独赋值 只能读
  比如你要改Z轴的值 可以这样写
    transform.localEulerAngles = new Vector3(transform.localEulerAngles.x,transform.localEulerAngles.y, Z);
  Z换成需要的值就行了

Unity3D笔记 愤怒的小鸟<五> 小鸟动画+Unity3D如何设置断点调式的更多相关文章

  1. Unity3D笔记 模型和角色动画的输出设置

  2. Unity3D笔记 愤怒的小鸟<七> 小鸟群准备动画

    要实现的目标: 1.3只小鸟初始动画 2.完善代码slingShot.js 3.完善代码BirdMoving.js 1.实现3个准备动画:Unity3D内置的动画管理器 1.1.先选择GameObje ...

  3. Unity3D笔记 愤怒的小鸟<六> 弹弓发射小鸟

    要实现的目标 实现个性化的鼠标 实现弹弓 选择小鸟.拉升弹弓.发射小鸟 弹弓橡皮筋 声音 1.实现个性化鼠标 效果 2.添加弹弓 建立两个材质 创建一个空GameObject 把两个shoot拖进来统 ...

  4. Unity3D笔记 愤怒的小鸟<二> 实现Play界面

    创建Play界面.能个把各个图片组合成一个场景,场景组成后背景能够不停的滚动,当鼠标单击时显示图片手型鼠标 一.GUI Texture 1.创建背景.地面.树木.草 ,这里注意Z轴的排序,一层一层则第 ...

  5. Unity3D笔记 愤怒的小鸟<一>场景切换

    新建3个场景,场景1 Start 十秒后自动切换到场景2 Splash,场景2在二秒后自动切换到场景3 Selection 一.场景一Start 二.场景2 Splash 三.场景3 Selectio ...

  6. Unity3D笔记 愤怒的小鸟<四> 实现Selelction界面

    一直跟着龚老师用js写,VS智能感应用习惯后发现这里用js对初学者比较蛋疼,MONO有提示但是还是无法和VS媲美就目前来看.所以这次还是换成熟悉的VS来开发. 目标:实现关卡页面 跑起来的效果如下: ...

  7. Unity3D笔记 愤怒的小鸟<三> 实现Play界面2

    前言:在Play页面中给Play页面添加一个“开始游戏”和“退出游戏”按钮顺便再来一个背景音乐 添加按钮可以是GUI.Button(),也可以是GUILayout.Button():给图片添加按钮可以 ...

  8. Unity3D笔记十五 碰撞、移动

    碰撞 Collision. [kəˈliʒən] 碰撞:冲突:(意见,看法)的抵触:(政党等的)倾轧 选择一个需要添加碰撞器的游戏对象后 Component->Physics- Unity一共为 ...

  9. Unity3D开发(五):Unity3D 4.x 使用Mecanim实现连击(转)

    原地址:http://www.unitymanual.com/blog-1801-1221.html unity3d 4.x 版本之后提供了一种新的动画机制Mecanim,虽然目前还支持之前的Anim ...

随机推荐

  1. 文件传输协议(FTP,SFTP,SCP)(修改中)

    FTP(File Transfer Protocol):是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层.FTP ...

  2. javascript的console命令

    1.分类输出 console.log('文字信息'); console.info('提示信息'); console.warn('警告信息'); console.error('错误信息'); 2.分组输 ...

  3. GetLastError结果列表

    程序执行出现错误,使用GetLastError可以初步得到错误的大致原因,方便程序员来分析,错误码对应含义总结如下,方便查看! MSDN System Error Codes: https://doc ...

  4. 破解IT运维成本困境,专业化分工是妙方

    随着IT建设的不断深入和发展,IT运维成为了企业运营的必需品.许多企业的IT预算相比于去年虽然有了很大的提高,但总体来说还是非常紧张.上周,我参加了一个CIO沙龙研讨会,现场调查问到目前CIO在IT运 ...

  5. 如何破解银行O2O模式创新

    文/赵志宏 摩 根大通的买房APP,使客户可根据自己的位置选择合适的贷款经理:华道数据提供的卡惠APP,使客户可随时查询自己周围信用卡刷卡打折的商户信息:民生银 行的微信预约叫号功能,使客户根据可自己 ...

  6. ajax+json+Struts2实现list传递(转载)

    一.首先需要下载JSON依赖的jar包.它主要是依赖如下: json-lib-2.2.2-jdk15 ezmorph-1.0.4       commons-logging-1.0.4       c ...

  7. SpringBoot------热部署(devtools)(推荐)

    1.修改pom.xml文件 <project> <dependencies> <!-- 使用devtool热部署插件(推荐) --> <dependency& ...

  8. SpringBoot------Eclipce配置Spring Boot

    步骤一: 步骤二: 点击左下角Eclipse图标下的“Popular”菜单,选择Spring安装(已安装的插件在Installed中显示),一直按步骤确定就好了,如果中途下载超时什么的,就看看自己的网 ...

  9. UVA 1232 - SKYLINE(线段树)

    UVA 1232 - SKYLINE option=com_onlinejudge&Itemid=8&page=show_problem&category=502&pr ...

  10. Java -- Java 类集 -- 目录

    13.1 认识类集 13.1.1 基本概念 13.1.2 类集框架主要接口 13.2 Collection接口 13.2.1 Collection接口的定义 13.2.2 Collection子接口的 ...