0
のは、私がオブジェクトがあるとしましょう:AddForce
- オブジェクトA:プレーヤー(ファーストパーソン)
- オブジェクトB:ボール(たとえばサッカーボール)
ヒットボール私が見ている方向で、それが現実的に行動するような現実的な物理学を与えたいと思います。それが唯一の「Z」の方向に行く何らかの理由
using UnityEngine;
using System.Collections;
public class KickScript : MonoBehaviour
{
public float bounceFactor = 0.9f; // Determines how the ball will be bouncing after landing. The value is [0..1]
public float forceFactor = 10f;
public float tMax = 5f; // Pressing time upper limit
private float kickForce; // Keeps time interval between button press and release
private Vector3 prevVelocity; // Keeps rigidbody velocity, calculated in FixedUpdate()
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
if (hit.collider.name == "Ball") // Rename ball object to "Ball" in Inspector, or change name here
kickForce = Time.time;
}
}
}
void FixedUpdate()
{
if (kickForce != 0)
{
float angle = Random.Range(0, 20) * Mathf.Deg2Rad;
GetComponent<Rigidbody>().AddForce(new Vector3(0.0f, forceFactor * Mathf.Clamp(kickForce, 0.0f, tMax) * Mathf.Sin(angle), forceFactor * Mathf.Clamp(kickForce, 0.0f, tMax) * Mathf.Cos(angle)), ForceMode.VelocityChange);
kickForce = 0;
}
prevVelocity = GetComponent<Rigidbody>().velocity;
}
void OnCollisionEnter(Collision col)
{
if (col.gameObject.tag == "Ground") // Do not forget assign tag to the field
{
GetComponent<Rigidbody>().velocity = new Vector3(prevVelocity.x, -prevVelocity.y * Mathf.Clamp01(bounceFactor), prevVelocity.z);
}
}
}
:これは私が(これは、単にテストのために多かれ少なかれあるコードはとても混沌に見える理由です)、これまでに得たものである
。