개인프로젝트 2일차를 진행하면서 특강의 내용을 참고하여 구현사항을 내용을 진행해야겠다.
// activeInHierarchy
if (inventoryObject.activeInHierarchy)
{
inventoryObject.SetActive(false);
}
else
{
inventoryObject.SetActive(true);
}
// activeSelf
if (inventoryObject.activeSelf)
{
inventoryObject.SetActive(false);
}
else
{
inventoryObject.SetActive(true);
}
설명: activeInHierarchy는 부모가 활성화여부에 따라 값이 변경되지만 activeSelf는 자신의 활성화여부에 따라 값이 변경된다.
예시: 부모가 모두 비활성화인 상태로 진행했을 때
activeInHierarchy > 자신(활성화) = false
activeInHierarchy > 자신(비활성화) = false
activeSelf > 자신(활성화) = true
activeSelf > 자신(비활성화) = false
설명: Ray로 정면으로 발사하여 오브젝트를 확인하고 있을 때 상호작용 키를 입력하면 확인한 오브젝트가 사라지고 인벤토리 안으로 오브젝트의 아이템 정보가 들어가진다.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MovingObject : MonoBehaviour
{
public bool moveX;
public bool moveY;
public bool moveZ;
public float moveTime;
public float moveSpeed;
private Vector3 moveDirction = Vector3.zero;
private Rigidbody rigidbody;
private PlayerController Controller = new PlayerController();
private void Awake()
{
rigidbody = GetComponent<Rigidbody>();
}
private void Start()
{
StartCoroutine(MoveChange());
if (moveX)
{
moveDirction += Vector3.right;
}
if (moveY)
{
moveDirction += Vector3.up;
}
if (moveZ)
{
moveDirction += Vector3.forward;
}
moveDirction *= moveSpeed;
}
private void FixedUpdate()
{
if (Controller != null)
{
Controller.platformDir = rigidbody.velocity;
}
}
IEnumerator MoveChange()
{
while (true)
{
moveDirction *= -1;
rigidbody.velocity = moveDirction;
yield return new WaitForSeconds(moveTime);
}
}
private void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.TryGetComponent(out PlayerController controller))
{
Controller = controller;
}
}
private void OnCollisionExit(Collision collision)
{
if (collision.gameObject.TryGetComponent(out PlayerController controller))
{
Controller.platformDir = Vector3.zero;
Controller = null;
}
}
}
// PlayerController.cs
rigidbody.velocity = moveDir + platformDir;
설명: 각 move X,Y,Z를 bool과 moveSpeed로 이동 값을 정하고
충돌인 Collision의 Enter를 하면 이동을 제어하는 PlayerController값을 받아와서 오브젝트의 추가 이동 값을 지정해준다. 그 후 플레이어의 이동에 지정한 값을 합쳐서 이동시킨다.
1. activeSelf와 activeInHierarchy: 실제 오브젝트의 활성화와 부모의 오브젝트의 활성화인지의 차이에 따라 잘 구현해야겠음
1. 없음
1. 없음
특강에서의 내용을 참고해서 구현을 하다보니 나만의 방식이 아닌 비슷한 내용으로 구현이 되는 상황이 많이 발생하는데 실력이 향상이 되는건지... 아닌지 애매하다...