public void MovePlayer(Vector2 dir) { if (dir != Vector2.zero) { Dir = dir; } var childAngle = childStartAngle; childAngle += dir.x * inclineAngleScale * inclineAngleX; childAngle += dir.y * inclineAngleScale * inclineAngleY; child.localEulerAngles = childAngle; var forwerdRay = new Ray(transform.position - transform.forward, transform.forward); if (Physics.Raycast(forwerdRay, out var forwerdHit, Mathf.Infinity, mask)) { var forwardPoints = PointDistance.GetUpRight(forwerdHit, transform.up, transform.right); Normal = forwardPoints.Normal; var upFV = Vector3.ProjectOnPlane(cameraTransform.up, forwardPoints.Normal).normalized; var rightFV = Vector3.ProjectOnPlane(cameraTransform.right, forwardPoints.Normal).normalized; Debug.DrawLine(transform.position, transform.position + rightFV, Color.black); Debug.DrawLine(transform.position, transform.position + upFV, Color.black); Debug.DrawLine(forwerdHit.point, forwerdHit.point + forwardPoints.Normal, Color.red); var projectDir = (upFV * dir.y + rightFV * dir.x).normalized; var move = projectDir * (speed * Time.timeScale); rigid.AddForce(moveForceMultiplier * (move - rigid.velocity), ForceMode.Force); rigid.AddForce((forwerdHit.point - transform.position).magnitude * -forwardPoints.Normal * gravity, ForceMode.Acceleration); } }
void LookAtPlayer() { Ray forwerdRay = new Ray(transform.position - transform.forward, transform.forward); if (Physics.Raycast(forwerdRay, out var forwerdHit, Mathf.Infinity, mask)) { var forwardPoints = PointDistance.GetUpRight(forwerdHit, transform.up, transform.right); transform.LookAt(transform.position - forwardPoints.Normal, forwardPoints.Up.normalized); } }
private void Update() { explosionFrame++; if (isExplosion) { if (explosionFrame > 4) { transform.GetChild(0).gameObject.SetActive(false); } if (explosionFrame > 30) { Destroy(gameObject); } } else { if (explosionFrame > 60) { isExplosion = true; explosionFrame = 0; GetComponent <ParticleSystem>().Play(); GetComponent <SphereCollider>().radius += bombRadius; transform.GetChild(0).localScale += Vector3.one / 4; AudioManager.Instance.Play(se); } var forwerdRay = new Ray(transform.position - transform.forward, transform.forward); if (Physics.Raycast(forwerdRay, out var forwerdHit, Mathf.Infinity, mask)) { var forwardPoints = PointDistance.GetUpRight(forwerdHit, transform.up, transform.right); transform.localPosition += (dir.x * forwardPoints.Right.normalized + dir.y * forwardPoints.Up.normalized) * speed; } } }
static void SetBlock() { Undo.RecordObjects(Selection.gameObjects.Select(o => o.transform).ToArray(), "set"); var mask = LayerMask.GetMask(new string[] { "Mebiusu" }); foreach (var gameObject in Selection.gameObjects) { var transform = gameObject.transform; var forwerdRay = new Ray(transform.position - transform.forward, transform.forward); if (Physics.Raycast(forwerdRay, out var forwerdHit, Mathf.Infinity, mask)) { var forwardPoints = PointDistance.GetUpRight(forwerdHit, transform.up, transform.right); Vector3 upFV = forwardPoints.Up.normalized; transform.LookAt(transform.position - forwardPoints.Normal, upFV); } forwerdRay = new Ray(transform.position - transform.forward, transform.forward); if (Physics.Raycast(forwerdRay, out forwerdHit, Mathf.Infinity, mask)) { var forwardPoints = PointDistance.GetUpRight(forwerdHit, transform.up, transform.right); transform.localPosition = forwerdHit.point + forwardPoints.Normal * length; } } }
void Set(Vector3 prev, Vector3 current) { Ray forwerdRay = new Ray(transform.position - transform.forward, transform.forward); Debug.DrawRay(forwerdRay.origin, forwerdRay.direction * 10); if (Physics.Raycast(forwerdRay, out var forwerdHit, Mathf.Infinity, mask)) { var forwardPoints = PointDistance.GetUpRight(forwerdHit, transform.up, transform.right); var sa = current - prev; transform.localPosition += forwardPoints.Right.normalized * sa.x + forwardPoints.Up.normalized * sa.y + forwardPoints.Normal * sa.z; } forwerdRay = new Ray(transform.position - transform.forward, transform.forward); if (Physics.Raycast(forwerdRay, out forwerdHit, Mathf.Infinity, mask)) { var forwardPoints = PointDistance.GetUpRight(forwerdHit, transform.up, transform.right); Vector3 upFV = forwardPoints.Up.normalized; Quaternion OriginalRot = transform.rotation; transform.LookAt(transform.position - forwardPoints.Normal, upFV); Quaternion NewRot = transform.rotation; transform.rotation = Quaternion.Slerp(OriginalRot, NewRot, smoothSpeed); } }
public void MoveBlock(Vector2 dir) { var forwerdRay = new Ray(transform.position - transform.forward, transform.forward); if (Physics.Raycast(forwerdRay, out var forwerdHit, Mathf.Infinity, mask)) { var forwardPoints = PointDistance.GetUpRight(forwerdHit, transform.up, transform.right); var upFV = forwardPoints.Up.normalized; var rightFV = forwardPoints.Right.normalized; Debug.DrawLine(transform.position, transform.position + rightFV, Color.black); Debug.DrawLine(transform.position, transform.position + upFV, Color.black); var move = upFV * dir.y + rightFV * dir.x; GetComponent <Rigidbody>().AddForce(-forwardPoints.Normal * 5, ForceMode.Acceleration); if (dir != Vector2.zero) { GetComponent <Rigidbody>().AddForce(move, ForceMode.VelocityChange); } } }