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

重力と投げる|Unity5

重力と投げる|Unity5

重力と投げる|Unity5 : ZIPファイル(11.6MB)

ボールをマウスで投げる。

C#

ThrowingGravity.cs

using UnityEngine;
using System.Collections;

public class ThrowingGravity : MonoBehaviour {
	// Rigidbody2D rib;
	Vector2 sprite;
	Vector2 lt;
	Vector2 lb;
	Vector2 rt;
	Vector2 rb;

	float offsetX;
	float offsetY;
	float downX;
	float downY;
	float vx = 0;
	float vy = 0;
	float dist = 0;
	float rad = 0;
	//float d = 1f;
	bool ballFlag = true;
	float width = 0;
	float gravity = -0.003f;
	float bounce = -0.7f;
	Collider2D aCollider2d;

	void Start () {
		//rib = GetComponent<Rigidbody2D>();
		//rib.isKinematic = true; // 重力の無効化

		//d = 10.0f * Time.deltaTime;

		sprite = transform.position;

		// カメラのビューポートの範囲(左、右、トップ、ボトム)を取得
		lt = Camera.main.ViewportToWorldPoint (new Vector2 (0, 0));
		lb = Camera.main.ViewportToWorldPoint (new Vector2 (0, 1));
		rt = Camera.main.ViewportToWorldPoint (new Vector2 (1, 0));
		rb = Camera.main.ViewportToWorldPoint (new Vector2 (1, 1));

		// ボールの半径を取得
		width = GetComponent<SpriteRenderer> ().bounds.size.x;
		width = width / 2;

	}

	// 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) {
				ballFlag = false;
				float dx = tapPoint.x - sprite.x;
				float dy = tapPoint.y - sprite.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;

				downX = offsetX;
				downY = offsetY;
			} else {
				ballFlag = true;
			}
		}

		if(Input.GetMouseButton(0)){
			if (aCollider2d) {
				ballFlag = false;
				sprite.x = tapPoint.x - offsetX;
				sprite.y = tapPoint.y - offsetY;
				vx = (sprite.x - downX) * 1f;
				vy = (sprite.y - downY) * 1f;
				transform.position = sprite;
				downX = sprite.x;
				downY = sprite.y;
			}
		}

		if (Input.GetMouseButtonUp (0)) 
		{
			ballFlag = true;

			float dx = sprite.x - downX;
			float dy = sprite.y - downY;
		}

		if (ballFlag) {
			vy += gravity;
			sprite.x += vx;
			sprite.y += vy;

			//GetComponent<Rigidbody2D>().velocity=sprite;
			//GetComponent<Rigidbody2D> ().AddForce (new Vector2 (vx, vy));

			if (sprite.x < lt.x+width) {
				sprite.x = lt.x+width;
				vx *= bounce;
			} else if (sprite.x > rt.x-width) {
				sprite.x = rt.x-width;
				vx *= bounce;
			}

			if (sprite.y < lt.y+width) {
				sprite.y = lt.y+width;
				vy *= bounce;
			} else if (sprite.y > lb.y-width) {
				sprite.y = lb.y-width;
				vy *= bounce;
			}
			transform.position = sprite;
		}
	}
}

コメントを残す

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

コメントフィード

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