1public class Cube : MonoBehaviour
2{3voidStart()4{5StartCoroutine(Circle(this.transform, new Vector3(0,0,0), new Vector3(1,0,0),2.0f));6}78 IEnumerator Circle(Transform rotateTransform, Vector3 center, Vector3 radius,float animationLength){910for(var time =0.0f; time < animationLength; time += Time.deltaTime)11{12 var t = time / animationLength;13 var r = Quaternion.Euler(0.0f, Mathf.SmoothStep(0.0f,180.0f, t),0.0f);14 rotateTransform.position = center +(r * radius);15 yield return null;16}17}18}
1using System.Collections;2using UnityEngine;34[RequireComponent(typeof(MeshFilter))]5public class CubeController : MonoBehaviour
6{7 private Mesh mesh;89 private IEnumerator Start()10{11constfloat rotationAngle =90.0f;12constfloat animationLength =2.0f;13 var center = new Vector2(0.5f,0.5f);14 this.mesh = this.GetComponent<MeshFilter>().mesh;15 this.mesh.MarkDynamic();16 var uv = this.mesh.uv;17 var modifiedUv = new Vector2[uv.Length];18 var angle =0.0f;19 var wait = new WaitForSeconds(1.0f);20while(true)21{22for(var time =0.0f; time < animationLength; time += Time.deltaTime)23{24 var t = time / animationLength;25 var r = Quaternion.Euler(0.0f,0.0f, angle + Mathf.SmoothStep(0.0f, rotationAngle, t));26for(var i =0; i < uv.Length; i++)27{28 modifiedUv[i]= center +(Vector2)(r *(uv[i]- center));29}30 this.mesh.uv = modifiedUv;31 this.mesh.UploadMeshData(false);32 yield return null;33}34{35 angle += rotationAngle;36 var r = Quaternion.Euler(0.0f,0.0f, angle);37for(var i =0; i < uv.Length; i++)38{39 modifiedUv[i]= center +(Vector2)(r *(uv[i]- center));40}41 this.mesh.uv = modifiedUv;42 this.mesh.UploadMeshData(false);43}44 yield return wait;45}46}4748 private voidOnDestroy()49{50Destroy(this.mesh);51}52}
色を回そうなんて変なことを考える人がいるかもしれません。
C#
1using System.Collections;2using UnityEngine;34[RequireComponent(typeof(Renderer))]5public class SphereController : MonoBehaviour
6{7 private static readonly int EmissionColorProperty = Shader.PropertyToID("_EmissionColor");8 private Material material;910 private IEnumerator Start()11{12constfloat rotationAngle =120.0f;13constfloat animationLength =2.0f;14 var axis = Vector3.one.normalized;15 this.material = this.GetComponent<Renderer>().material;16 var initialColor =(Vector3)this.material.GetVector(EmissionColorProperty);17 var angle =0.0f;18 var wait = new WaitForSeconds(1.0f);19while(true)20{21for(var time =0.0f; time < animationLength; time += Time.deltaTime)22{23 var t = time / animationLength;24 var r = Quaternion.AngleAxis(angle + Mathf.SmoothStep(0.0f, rotationAngle, t), axis);25 this.material.SetVector(EmissionColorProperty, r * initialColor);26 yield return null;27}28{29 angle += rotationAngle;30 var r = Quaternion.AngleAxis(angle, axis);31 this.material.SetVector(EmissionColorProperty, r * initialColor);32}33 yield return wait;34}35}3637 private voidOnDestroy()38{39Destroy(this.material);40}41}
1 transformA.position = center + vectorB;2 transformB.position = center + vectorA;
を入れて、カップをぴったりの位置に調整するようにしてみました。
とはいえ、よく見かけるforループはfor (var i = 0; i < count; i++)みたいな「整数型の変数をカウントアップしていきループ回数を制御する」というタイプだろうと思います。ご質問者さんが「斬新で驚いた」と感じたということは、標準的なforループの使い方からちょっと逸脱してしまったかもしれません。
このような形でなければならない理由は特にありませんので、ご質問者さんにとってしっくりくる書き方がありましたら、そのように書き換えてしまって問題ないと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/01/17 06:42
2021/01/17 12:36
退会済みユーザー
2021/01/17 14:31