制作滚动的方块 【插件】

最近有网友反映,要提供些”一些高级优化技术分享“。您可以根据侧重点反馈您的需求。
发送邮件 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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值