합치기 게임류 처럼 만들려고하는데 지금 코드는 합치기 구현이 됬거든 근데..10번에1~2번 정도 합쳐지지 않아 다름 등급으로 안올라간다
정확히는 1등급 2개를 합치면 2등급이 되야하는데 간혹가다 1등급만 남고 나머지 1등급짜리가 삭제되..
혹시 합치기는거 튜토리얼 아는거 있음 도움좀 줬으면 좋겠어
혹시 몰라 전체 코드 올림
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Rigidbody2D))]
[RequireComponent(typeof(SpriteRenderer))]
[RequireComponent(typeof(BoxCollider2D))]
public class Stone : MonoBehaviour
{
private bool _mouseState = false;
private GameObject target;
private GameObject btnUp_target;
private Vector3 MousePos;
private int level;
private SpriteRenderer sprite_renderer;
Rigidbody2D body2d;
BoxCollider2D box2d;
SpriteManager spriteManager;
public int Level
{
get
{
return level;
}
set
{
level = value;
if (level > spriteManager.stone_sprites.Length)
level = spriteManager.stone_sprites.Length;
sprite_renderer.sprite = spriteManager.stone_sprites[Level];
}
}
void Awake()
{
sprite_renderer = GetComponent<SpriteRenderer>();
body2d = GetComponent<Rigidbody2D>();
box2d = GetComponent<BoxCollider2D>();
spriteManager = SpriteManager.instance;
}
void Start()
{
body2d.gravityScale = 0;
transform.localScale = new Vector3(4, 4, 4);
box2d.size = new Vector2(0.2f, 0.2f);
Level = 0;
sprite_renderer.sprite = spriteManager.stone_sprites[Level];
}
void OnMouseDown()
{
target = GetClickedObject();
if (target != null)
{
_mouseState = true;
}
box2d.isTrigger = true;
}
void OnMouseDrag()
{
if (_mouseState)
{
MousePos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0));
target.transform.position = new Vector3(MousePos.x, MousePos.y, target.transform.position.z);
}
}
void OnMouseUp()
{
_mouseState = false;
Vector2 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Ray2D ray2D = new Ray2D(pos, Vector2.zero);
RaycastHit2D[] hit = Physics2D.RaycastAll(ray2D.origin, ray2D.direction);
if(hit.Length > 1)
{
for (int i = 1; i < hit.Length; ++i)
{
if (Level == hit[i].collider.GetComponent<Stone>().Level)
{
hit[i].collider.GetComponent<Stone>().Level++;
Destroy(gameObject);
}
}
}
box2d.isTrigger = false;
}
private GameObject GetClickedObject()
{
GameObject target = null;
Vector2 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Ray2D ray2D = new Ray2D(pos, Vector2.zero);
RaycastHit2D hit = Physics2D.Raycast(ray2D.origin, ray2D.direction);
if (hit.collider != null)
{
target = hit.collider.gameObject;
}
return target;
}
}
젤 밑쪽에 포문 돌리는거 저거 if (level ==hit[i-1] 이 되야 되는거 아니냐? 저거 그대로 i로 해두면 배열에 0번째 건너뛰자나? 그거때매 그런거 같은데.....
아!그거는 버튼을 땔때 겹치진 오브젝트들의 콜라이더를 체크하는데 거기에 자기 자신도 포함이 되서
합치기란게 조합말하는건가 black thorn prod 란 유툽채널에 있을거임
그럼 메인이 되는 오브젝트는 0번에 저장되니까 포문 돌릴때 제외 하고 다른 오브젝트만 레벨업 시켜준 다음에 기본 오브젝트를 삭제한다는 건가??? 그럼 저 레벨업이 제대로 들오가는지 디버그 찍어보고 오류 뜰때 어떻게 되는지 봐야것네
Cogito // 맞음 근데 오류는 없고 레벨도 제대로 올라가는데 스프라이트가 안바뀜.. sprite_renderer.sprite = spriteManager.stone_sprites[Level]; 이 아래 디버그 찍어도 레벨은 올라가 있는상태인데..
그럼 저 0번 배열에 들어가는 오브젝트가 원하는 오브젝트가 맞는지렁 스프라이트가 적용되는 위치가 어딘지를 알아봐야 될듯? 포문은 돌아갔는데 안바뀌고 오류 안뜬다는건 일단 어딘가에 제대로 적용 됐다는 거니깐 ㅇㅇ
형말이 맞는거 같아 0번째 들어가는 오브젝트가 "당연하게" 선택됬던 오브젝트라고 생각해서 생긴 문제였네
포문을 0번부터 돌리고 선택한 오브젝트의 박스콜라이더를 꺼버리니 문제가 해결됬어 고마워!!
굳굳 해결됐다니 다행이넹 화이팅