前言:实现小鸟的动画,之前吐槽过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. 新浪股票接口AndroidSDK

    昨天想到一个点子,需要访问股票行情.于是在网上搜了一下免费的股市行情的接口.发现新浪股票的数据接口比较稳定,于是就用它了. 网上对于新浪股票的数据接口介绍比较详细,并且实现也很简单,所以花了一下午就基 ...

  2. 详解BarTender选项大小调整模式

    BarTender大小调整模式是DotCode码制独有的符号体系特殊选项.DotCode 符号可能在形状上有所不同,包括从接近正方形的点阵到细长的色带,而“大小调整模式”选项通过指定点阵的配置来确定 ...

  3. iOS: 解决某些第三方库因为ARC不能使用的问题

    1.在target下面的build phases下有一个compile source,下面有很多待编译文件.可以看到一个compile flag,可以针对某些文件进行arc设置.这样,某些框架不能使用 ...

  4. UML类图关系(转,添加了实例)

    UML类图关系(泛化 .继承.实现.依赖.关联.聚合.组合) 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Associati ...

  5. C#------Aspose.cells使用方法

    转载: http://www.cnblogs.com/muer/p/yaxle.html 代码: public ActionResult ImportData(HttpPostedFileBase f ...

  6. cocos2dx 优化略记

    缓存cache: 预加载资源到内存, 可以异步加载.  直接使用sprite:create()来加载资源的话,  有时候会发现,  在第一次运行动作的时候会变的很卡.  那是因为第一次要加载资源到内存 ...

  7. osg内置shader变量

    uniform int osg_FrameNumber:当前OSG程序运行的帧数: uniform float osg_FrameTime:当前OSG程序的运行总时间: uniform float o ...

  8. 【译】Apache Flink Kafka consumer

    Flink提供了Kafka connector用于消费/生产Apache Kafka topic的数据.Flink的Kafka consumer集成了checkpoint机制以提供精确一次的处理语义. ...

  9. Elasticsearch 配置同义词

    配置近义词 近义词组件已经是elasticsearch自带的了,所以不需要额外安装插件,但是想要让近义词和IK一起使用,就需要配置自己的分析器了. 首先创建近义词文档 在config目录下 mkdir ...

  10. C#实现新建文件并写入内容

    using System; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(stri ...