プログラミングとイラストレーション » 投げる v2|Unity5 2D
プログラミングとイラストレーション > Unity > 投げる v2|Unity5 2D

投げる v2|Unity5 2D

投げる|Unity5 2D

投げる v2|Unity5 : ZIPファイル(554kb)

Unity5の2Dで、複数のスプライトを画面内で投げるシミュレーションを作ってみました。四方の壁や、他のボールに当たると跳ね返ります。

C#

Throwing_v2.cs

using UnityEngine;
using System.Collections;

public class Throwing_v2 : MonoBehaviour {

	float offsetX;
	float offsetY;
	float oldX = 0;
	float oldY = 0;
	float vx = 0;
	float vy = 0;
	Collider2D aCollider2d = null;

	void Start(){
		
	}

	// Update is called once per frame
	void FixedUpdate () {

		Vector2 tapPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
		aCollider2d = Physics2D.OverlapPoint(tapPoint);

		if(Input.GetMouseButtonDown(0))
		{
			if (aCollider2d) {
				if (aCollider2d.name == "ball" || aCollider2d.name == "ball2") {
					aCollider2d.GetComponent<Rigidbody2D> ().isKinematic = true;
					Vector2 screen_point1 = Input.mousePosition;
					//上記マウス位置を元に、ワールド空間の位置を取得
					Vector3 mousePos = Camera.main.ScreenToWorldPoint (screen_point1);

					Vector3 spritePos = aCollider2d.transform.position;
					float dx = mousePos.x - spritePos.x;
					float dy = mousePos.y - spritePos.y;
					float rad = Mathf.Atan2 (dy, dx);
					float dist = Mathf.Sqrt (dx * dx + dy * dy);
					offsetX = Mathf.Cos (rad) * dist;
					offsetY = Mathf.Sin (rad) * dist;

					oldX = mousePos.x;
					oldY = mousePos.y;
				}	
			}
		}
		else {
			if (aCollider2d) {
				if (aCollider2d.name == "ball" || aCollider2d.name == "ball2") {
					aCollider2d.GetComponent<Rigidbody2D> ().isKinematic = false;
				}
			}
		}

		if (Input.GetMouseButton (0)) 
		{
			if (aCollider2d) {
				
				if (aCollider2d.name == "ball" || aCollider2d.name == "ball2") {
					aCollider2d.GetComponent<Rigidbody2D> ().isKinematic = true;
					Vector2 screen_point1 = Input.mousePosition;
					//上記マウス位置を元に、ワールド空間の位置を取得
					Vector2 mouseMovePos = Camera.main.ScreenToWorldPoint (screen_point1);

					Vector2 sprite = aCollider2d.transform.position;
					sprite.x = mouseMovePos.x - offsetX;
					sprite.y = mouseMovePos.y - offsetY;
					aCollider2d.transform.position = sprite;
				}
			}
		}
		else {
			if (aCollider2d) {
				if (aCollider2d.name == "ball" || aCollider2d.name == "ball2") {
					aCollider2d.GetComponent<Rigidbody2D> ().isKinematic = false;
				}
			}
		}

		if (Input.GetMouseButtonUp (0)) {
			if (aCollider2d) {
				if (aCollider2d.name == "ball" || aCollider2d.name == "ball2") {
					aCollider2d.GetComponent<Rigidbody2D> ().isKinematic = false;

					Vector2 sprite = aCollider2d.transform.position;
					vx = sprite.x - oldX;
					vy = sprite.y - oldY;

					aCollider2d.GetComponent<Rigidbody2D> ().AddForce (new Vector2 (vx, vy));
				}
			}
		} else {
			if (aCollider2d) {
				if (aCollider2d.name == "ball" || aCollider2d.name == "ball2") {
					aCollider2d.GetComponent<Rigidbody2D> ().isKinematic = false;
				}
			}
		}
	}
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントフィード

トラックバック URL : http://www.htmlcode.jp/%e6%8a%95%e3%81%92%e3%82%8b-v2%ef%bd%9cunity5/trackback/