`
bcyy
  • 浏览: 1825784 次
文章分类
社区版块
存档分类
最新评论

制作滚动的方块 【插件】

 
阅读更多
最近有网友反映,要提供些”一些高级优化技术分享“。您可以根据侧重点反馈您的需求。
发送邮件 unity3d168@yeah.net



代码部分

var cubeSize: float = 1;

  var cubeSpeed: float = 500;

  var UpFace: Transform;

  private

  var totalRotation: float = 0; // determines if we're past the 90 degrees

  private

  var beRolling: boolean = false;

  private

  var RotateDir: int;

  private

  var startRotate: boolean = false;

  private

  var RotatePivot: Vector3;

  private

  var NextRot: Vector3;

  private

  var NextPosi: Vector3;

  // Use this for initialization

  function Start() {

  NextRot = transform.rotation.eulerAngles;

  NextPosi = transform.position;

  }

  // Update is called once per frame

  function Update() {

  if (beRolling == false) {

  if (Input.GetKey(“left”)) {

  if (NextPosi.x > -4) {

  //print(“rolling”);

  beRolling = true;

  startRotate = true;

  RotateDir = 0;

  NextPosi.x--;

  }

  } else if (Input.GetKey(“up”)) {

  if (NextPosi.z < 4) {

  //print(“rolling”);

  beRolling = true;

  startRotate = true;

  RotateDir = 1;

  NextPosi.z++;

  }

  } else if (Input.GetKey(“right”)) {

  if (NextPosi.x < 4) {

  //print(“rolling”);

  beRolling = true;

  startRotate = true;

  RotateDir = 2;

  NextPosi.x++;

  }

  } else if (Input.GetKey(“down”)) {

  if (NextPosi.z > -4) {

  //print(“rolling”);

  beRolling = true;

  startRotate = true;

  RotateDir = 3;

  NextPosi.z--;

  }

  }

  } else {

  DoRoll(RotateDir);

  }

  }

  function DoRoll(Direct: int) {

  var spinAmount: float = Time.deltaTime * cubeSpeed;

  var t: float;

  var pos: Vector3;

  if (startRotate) {

  if (Direct == 0) {

  NextRot.z += 90;

  RotatePivot = transform.position + new Vector3(-0.5, -0.5, 0);

  } else if (Direct == 1) {

  NextRot.x += 90;

  RotatePivot = transform.position + new Vector3(0, -0.5, 0.5);

  } else if (Direct == 2) {

  NextRot.z -= 90;

  RotatePivot = transform.position + new Vector3(0.5, -0.5, 0);

  } else {

  NextRot.x -= 90;

  RotatePivot = transform.position + new Vector3(0, -0.5, -0.5);

  }

  NextRot.z = NextRot.z % 360;

  NextRot.x = NextRot.x % 360;

  totalRotation = 0;

  startRotate = false;

  }

  if (beRolling) {

  if (Direct == 0) {

  transform.RotateAround(RotatePivot, Vector3.forward, spinAmount);

  } else if (Direct == 1) {

  transform.RotateAround(RotatePivot, Vector3.right, spinAmount);

  } else if (Direct == 2) {

  transform.RotateAround(RotatePivot, Vector3.forward * -1, spinAmount);

  } else {

  transform.RotateAround(RotatePivot, Vector3.right * -1, spinAmount);

  }

  // add to amount of spin in this update the total rotation

  totalRotation += spinAmount;

  // check if we have to move to the next edge

  if (totalRotation >= 90) {

  // we move to next corner as pivot point

  totalRotation = 0;

  beRolling = false;

  var ri: int = 0;

  var rf: float = transform.eulerAngles.x;

  if (rf < 0) rf = 360 + rf;

  ri = rf / 90.0;

  if ((rf % 90.0) > 45) {

  ri += 1;

  }

  ri = ri * 90;

  transform.eulerAngles.x = ri;

  rf = transform.eulerAngles.y;

  if (rf < 0) rf = 360 + rf;

  ri = rf / 90.0;

  if ((rf % 90.0) > 45) {

  ri += 1;

  }

  ri = ri * 90;

  transform.eulerAngles.y = ri;

  rf = transform.eulerAngles.z;

  if (rf < 0) rf = 360 + rf;

  ri = rf / 90.0;

  if ((rf % 90.0) > 45) {

  ri += 1;

  }

  ri = ri * 90;

  transform.eulerAngles.z = ri;

  transform.position = NextPosi;

  print(“rolling OK rotation :” + transform.eulerAngles);

  }

  }

  }


本插件来自unity3d教程手册http://www.unitymanual.com/4598.html




分享到:
评论

相关推荐

    Android入门到精通源代码.

    2.4.2 安装和配置Eclipse中Android插件 2.5 使用Eclipse开发Android应用程序 2.5.1 使用Eclipse创建Android项目 2.5.2 Eclipse中Android项目架构 2.5.3 Eclipse中Android项目的调试和运行 第3章 Android中的Activity...

    JAVA上百实例源码以及开源项目

    Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字  Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象...

    JAVA上百实例源码以及开源项目源代码

    java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  ...

    flash shiti

    Flash 模拟试题及答案(一) 1.Loading应该放在影片的什麽位置? A. 影片不能有Loading B....C....D....2.Flash中设置属性的命令是?...A....B....C....D....A....B.... 目前Flash 最新的创作平台是Flash 6.0,播放插件是Flash ...

    java源码包---java 源码 大量 实例

    java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  ...

    java源码包2

    java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 ...

    java源码包3

    java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 ...

    java源码包4

    java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...

Global site tag (gtag.js) - Google Analytics