Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
毎日出題の3日目第二問の答え
public class PrimitiveTypeRotation : MonoBehaviour {
GameObject primitive = null;
PrimitiveType currentPrimitive = PrimitiveType.Sphere;
void Update () {
if (Input.GetMouseButton(0))
{
// マウス位置から発生するRayを作成
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
// 当たり確認オブジェクト
RaycastHit hit;
if (Physics.Raycast(ray, out hit, float.MaxValue))
{
if (this.primitive == null)
{
this.primitive = GameObject.CreatePrimitive(currentPrimitive);
Destroy(primitive.GetComponent<Collider>());
// 次回生成する primitive type を次の物体にしておく。
this.IncreasePrimitiveType();
}
// hit位置へ移動させることで、Mouseに追従しているかのように見せる
this.primitive.transform.position = hit.point;
}
}
else
if (Input.GetMouseButtonUp(0)) {
if (primitive != null)
{
Destroy(this.primitive);
}
}
}
void IncreasePrimitiveType()
{
bool collect = false;
// 今何番目かを取得
foreach ( PrimitiveType prim in System.Enum.GetValues(typeof(PrimitiveType)) )
{
Debug.Log(prim.ToString());
if ( prim == this.currentPrimitive )
{
collect = true;
// 見つかったら次のループで代入するので以降は何もせず抜ける
continue;
}
// 見つけたフラグが立ってるならば代入して終了
if (collect)
{
this.currentPrimitive = prim;
return;
}
}
// ループが終了しても代入処理がここまで何もされてないということは、primitive type の末尾だったということ。
// なのでPrimitiveTypeの先頭にあるパラメータを代入する。
foreach(PrimitiveType prim in System.Enum.GetValues(typeof(PrimitiveType))){
this.currentPrimitive = prim;
// 最初の1つ目を取ったら解散
return;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.