이번에는 오브젝트 위치를 제어해보자.
오브젝트가 클릭되지 않을때 상태,
오브젝트가 클릭되었을때의 상태를 함수로 정의하고
각각 클릭되었을때 상황에 맞추어 함수를 실행하는게 목표다.
먼저 장갑, 주전자, 팥스푼의 원래 위치를 설정하는 함수를 만들어보자.
1) 장갑, 주전자, 팥스푼의 원래 transform 지정 함수
위치에 대한 코드내용은 아래 강의를 참조하면 될것 같습니다.
https://allaboutmaker.tistory.com/23
주전자 오브젝트에 inspector를 보면 transform이 나옵니다.
이 정보를 그대로 함수에 옮겨 봅시다. 소수점 뒤는 f를 붙여 줍니다.
여기에서 Rotation값은 0으로 초기화 시켜줍니다.
크기는 크게 변하지 않기 때문에 초기화 안해주겠습니다.
================
void jooInitPosition()
{
jooObject.transform.position = new Vector3(3.27f, -2.67f, 0);
Vector3 vec = new Vector3(0,0,0);
jooObject.transform.rotation = Quaternion.Euler(vec);
}
================
다른 오브젝트들도 위와 같은 방식으로 초기값을 잡아줍니다.
================
void janggabInitPosition()
{
janggab.transform.position = new Vector3(2.25f, -0.81f, 0);
Vector3 vec = new Vector3(0,0,0);
janggab.transform.rotation = Quaternion.Euler(vec);
}
void potscopeInitPosition()
{
potscopeObject.transform.position = new Vector3(5.95f, -2.42f, 0);
Vector3 vec = new Vector3(0,0,90);
potscopeObject.transform.rotation = Quaternion.Euler(vec);
}
================
2) 클릭했을때 transform 지정 함수
주전자를 클릭했을때 주전자가 45도 정도 기울어지면 훨씬 게임이 생동감 있어질 것같다.
그래서 클릭했을때 각도가 45도 기울어지도록 설정해보자.
주전자를 클릭했을때 주전자 오브젝트를 transform rotation z축을 45값을 줘보자.
클릭했을때 position은 마우스가 움직이는 위치이다.
정리해보면 주전자를 클릭했을때,
positon은 FolloObject()
rotation은 z값 45
다른 오브젝트는 원래 위치로
여기에서 코드가 길어지니까 클릭했을때 함수를 만들어서 관리해보자.
*로직*
-------------------------------------
objectMove(장갑), z축 45도 기울어, 다른오브젝트 원래 위치
=>
objectMove(janggab);
Vector3 vec = new Vector3(0,0,45);
jooObject.transform.rotation = Quaternion.Euler(vec); //z축 45도 기울기
jooInitPosition();
potscopeInitPosition();
-------------------------------------
함수로 만들기
=====================
void ClickJanggab(){
objectMove(janggab);
Vector3 vec = new Vector3(0,0,45);
janggab.transform.rotation = Quaternion.Euler(vec); //z축 45도 기울기
jooInitPosition();
potscopeInitPosition();
}
=====================
위 와같이 주전자, 팥스푼도 만들자.
=====================
void Clickjujunja(){
objectMove(jooObject);
Vector3 vec = new Vector3(0,0,45);
jooObject.transform.rotation = Quaternion.Euler(vec);
janggabInitPosition();
potscopeInitPosition();
}
void Clickpotspoon(){
objectMove(potscopeObject);
Vector3 vec = new Vector3(0,0,45);
potscopeObject.transform.rotation = Quaternion.Euler(vec);
janggabInitPosition();
jooInitPosition();
}
=====================
지금까지 원래 위치와 클릭했을때 위치를 함수로 정해 주었습니다.
이번에는 클릭했을때 상황에서 함수를 실행하도록 해주겠습니다.
3) 클릭했을때 클릭한 행동하는 함수 매칭
ClickNum이 클릭했을때 변수를 변경해주는 거라서
ObjectFollowing() 함수에
objectMove(오브젝트)==> 이 자리에 클릭했을때 함수를 넣어주면된다.
=====================
void ObjectFollowing()
{
if(ClickNum==0){
ClickJanggab();
}else if(ClickNum==1){
Clickjujunja();
}else if(ClickNum==2){
Clickpotspoon();
}
}
=====================
플레이 버튼을 눌러서 장갑, 주전자, 스푼을 클릭해보자.
장갑 클릭했을때
주전자 클릭했을때
팥스푼 클릭했을때
4) 정리하기
=======================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MouseObject : MonoBehaviour
{
public GameObject janggab; //장갑
public GameObject jooObject; //주전자
public GameObject potscopeObject; //팟스푼
public GameObject[] bongtoo; //봉투
public GameObject[] boonga; //붕어
public Vector3[] vecPo;
public float length;
public int ClickNum; // 장갑,주전자,팥/팥스푼을 선택할때 설정할 변수
public bool isBongtooit; // 봉투 클릭 여부 저장하는 변수
public bool isBoogit; // 붕어빵 클릭여부 저장하는 변수
void Start()
{
length = 0.5f ;
vecPo[0] =new Vector3(length,0,0);
vecPo[1] =new Vector3(-length,0,0);
vecPo[2] =new Vector3(0,length,0);
vecPo[3] =new Vector3(0,-length,0);
isBongtooit = false;
isBoogit = false;
ClickNum = -1;
}
void Update()
{
if (Input.GetMouseButtonDown (0)) {
FindObject();
}
objectMove(gameObject);
ObjectFollowing();
}
void objectMove(GameObject obj)
{
LayerManager();
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3 vec = new Vector3(mousePosition.x, mousePosition.y, 0);
obj.transform.position = vec;
}
void FindObject()
{
for(int index=0 ; index<vecPo.Length ; index++){
Debug.DrawRay(transform.position, vecPo[index], new Color(0,1,0));
RaycastHit2D hit = Physics2D.Raycast(transform.position, vecPo[index], 1f, LayerMask.GetMask("boongObject"));
if(hit.collider != null){
Debug.Log(hit.collider.name);
isObject(hit.collider.name);
}
}
}
void isObject(string str)
{
if(str == "janggab"){
ClickNum =0;
}else if(str == "jujeonja"){
ClickNum =1;
}else if( str == "potThe" || str == "potpot"){
ClickNum =2;
}
if(str == "bongtoo" || str == "bongto" || str == "bongto1" || str == "bongto2" || str == "bongto3" || str == "bongto4" || str == "bongto5")
isBongtooit = true;
if( str == "boong" || str == "pot" || str == "boong1" || str == "boong2" || str == "boong3" || str == "boong4" || str == "boong5" )
isBoogit =true;
}
void ObjectFollowing()
{
if(ClickNum==0){
ClickJanggab();
}else if(ClickNum==1){
Clickjujunja();
}else if(ClickNum==2){
Clickpotspoon();
}
}
void LayerManager()
{
if(ClickNum ==0){
janggab.layer = LayerMask.NameToLayer("Water");
jooObject.layer = LayerMask.NameToLayer("boongObject");
potscopeObject.layer = LayerMask.NameToLayer("boongObject");
}else if(ClickNum == 1){
janggab.layer = LayerMask.NameToLayer("boongObject");
jooObject.layer = LayerMask.NameToLayer("Water");
potscopeObject.layer = LayerMask.NameToLayer("boongObject");
}else if(ClickNum == 2){
janggab.layer = LayerMask.NameToLayer("boongObject");
jooObject.layer = LayerMask.NameToLayer("boongObject");
potscopeObject.layer = LayerMask.NameToLayer("Water");
}
}
//---------------------------------------------------
// 클릭하기전 원래위치
void jooInitPosition()
{
jooObject.transform.position = new Vector3(3.27f, -2.67f, 0);
Vector3 vec = new Vector3(0,0,0);
jooObject.transform.rotation = Quaternion.Euler(vec);
}
void janggabInitPosition()
{
janggab.transform.position = new Vector3(2.25f, -0.81f, 0);
Vector3 vec = new Vector3(0,0,0);
janggab.transform.rotation = Quaternion.Euler(vec);
}
void potscopeInitPosition()
{
potscopeObject.transform.position = new Vector3(5.95f, -2.42f, 0);
Vector3 vec = new Vector3(0,0,90);
potscopeObject.transform.rotation = Quaternion.Euler(vec);
}
//---------------------------------------------------
//---------------------------------------------------
// 클릭했을때
void ClickJanggab()
{
objectMove(janggab);
Vector3 vec = new Vector3(0,0,45);
janggab.transform.rotation = Quaternion.Euler(vec); //z축 45도 기울기
jooInitPosition();
potscopeInitPosition();
}
void Clickjujunja()
{
objectMove(jooObject);
Vector3 vec = new Vector3(0,0,45);
jooObject.transform.rotation = Quaternion.Euler(vec);
janggabInitPosition();
potscopeInitPosition();
}
void Clickpotspoon()
{
objectMove(potscopeObject);
Vector3 vec = new Vector3(0,0,45);
potscopeObject.transform.rotation = Quaternion.Euler(vec);
janggabInitPosition();
jooInitPosition();
}
//---------------------------------------------------
}
=======================
자 이제 장갑, 주전자, 팥스푼 오브젝트를 움직이는 것에 대해서는 완료가 된것같다.
이제 이 오브젝트를 움직이면서 붕어빵을 클릭했을때 붕어가 익어가는 것을 다음 장에서 구현해보자.
붕어빵 게임 07] 스크립팅_ 봉투담기 (0) | 2020.05.07 |
---|---|
붕어빵 게임 06] 스크립팅_ 붕어빵 굽기 (0) | 2020.05.06 |
붕어빵 게임 04] 스크립팅_ 마우스로 클릭한 오브젝트 따라다니기 (0) | 2020.05.05 |
붕어빵 게임 03] 스크립팅_ 마우스 제어 (0) | 2020.05.05 |
붕어빵 게임 02] 게임오브젝트 스프라이트 만들기 (0) | 2020.05.05 |