Question by
Ryanchoi · Jun 27, 2017 at 01:52 PM ·
sorting layerssorting order
I'm a beginner , currently i have a problem with sorting order pragramatically .
hello, guys. currently, im doing an assignment of unity website. it's making simple angry birds game. but i have a problem with sorting orders.... the linerenderers's layer orders are not changed.
my codes are below :
using System.Collections; using System; using UnityEngine;
public class ProjectTileDragging : MonoBehaviour {
//variables for catapult
public float maxStretch = 3.0f;
public LineRenderer catapultLineFront;
public LineRenderer catapultLineBack;
private SpringJoint2D spring;
private Transform catapult;
private Ray rayToMouse;
private Ray leftCatapultToProjectile;
private float maxStretchSqr;
private float circleRadius;
private Vector2 prevVelocity;
private bool clickedOn = false;
//prediction line
int samples = 15;
float spacing = 0.1f;
private GameObject[] line;
private Vector3 home;
int force = 4;
void Awake()
{
spring = GetComponent<SpringJoint2D>();
catapult = spring.connectedBody.transform;
}
// Use this for initialization
void Start()
{
LineRendererSetup();
rayToMouse = new Ray(catapult.position, Vector3.zero);
leftCatapultToProjectile = new Ray(catapultLineFront.transform.position, Vector3.zero);
maxStretchSqr = maxStretch * maxStretch;
CircleCollider2D circle = GetComponent<Collider2D>() as CircleCollider2D;
circleRadius = circle.radius;
line = new GameObject[samples];
for (int i = 0; i < line.Length; i++)
{
var go = GameObject.CreatePrimitive(PrimitiveType.Sphere);
go.GetComponent<Collider>().enabled = false;
go.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);
line[i] = go;
}
home = transform.position;
}
void FixedUpdate()
{
if (clickedOn)
DisplayLine();
}
// Update is called once per frame
void Update()
{
if (clickedOn)
Dragging();
if (spring != null)
{
if (!GetComponent<Rigidbody2D>().isKinematic && prevVelocity.sqrMagnitude > GetComponent<Rigidbody2D>().velocity.sqrMagnitude)
{
Destroy(spring);
GetComponent<Rigidbody2D>().velocity = prevVelocity;
}
if (!clickedOn)
prevVelocity = GetComponent<Rigidbody2D>().velocity;
LineRendererUpdate();
}
else
{
catapultLineFront.enabled = false;
catapultLineBack.enabled = false;
}
}
void LineRendererSetup()
{
catapultLineFront.SetPosition(0, catapultLineFront.transform.position);
catapultLineBack.SetPosition(0, catapultLineBack.transform.position);
catapultLineFront.sortingLayerName = "ForeGround";
catapultLineBack.sortingLayerName = "ForeGround";
catapultLineFront.sortingOrder =6;
catapultLineBack.sortingOrder = 6;
Debug.Log("front:" + catapultLineFront.sortingLayerName + "// order = " + catapultLineFront.sortingOrder);
}
void OnMouseDown()
{
spring.enabled = false;
clickedOn = true;
Debug.Log("ff");
}
void OnMouseUp()
{
spring.enabled = true;
GetComponent<Rigidbody2D>().isKinematic = false;
clickedOn = false;
}
void Dragging()
{
Vector3 mouseWorldPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 catapultToMouse = mouseWorldPoint - catapult.position;
if (catapultToMouse.sqrMagnitude > maxStretchSqr)
{
rayToMouse.direction = catapultToMouse;
mouseWorldPoint = rayToMouse.GetPoint(maxStretch);
}
mouseWorldPoint.z = 0.0f;
transform.position = mouseWorldPoint;
}
void LineRendererUpdate()
{
Vector2 catapultToProjectile = transform.position - catapultLineFront.transform.position;
leftCatapultToProjectile.direction = catapultToProjectile;
Vector3 holdPoint = leftCatapultToProjectile.GetPoint(catapultToProjectile.magnitude + circleRadius);
catapultLineFront.SetPosition(1, holdPoint);
catapultLineBack.SetPosition(1, holdPoint);
}
void DisplayLine()
{
line[0].transform.position = transform.position;
Vector3 v3 = transform.position;
float y = (force * (home - transform.position)).y;
float t = 0.0f;
v3.y = 0.0f;
for (int i = 1; i < line.Length; i++)
{
v3 += force * (home - transform.position) * spacing;
t += spacing;
v3.y = y * t + 0.5f * Physics2D.gravity.y * t * t + transform.position.y;
line[i].transform.position = v3;
}
}
}
thank you
캡처.png
(12.4 kB)
Comment