unity 여러가지 기능들
스카이박스 교체하기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SkyButton : MonoBehaviour
{
public Material sky1;
private void OnMouseDown()
{
Debug.Log("sky change");
RenderSettings.skybox = sky1;
}
}
키입력 파악하기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class KeyInput : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("Space key was pressed.");
}
if (Input.GetKeyUp(KeyCode.Space))
{
Debug.Log("Space key was released.");
}
Input.GetAxis("Horizontal"); //수평축 입력
Input.GetAxis("Vertical"); //수직축 입력
}
}
주위를 회전하는 물체
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AroundingObject : MonoBehaviour
{
public GameObject target;
void Update()
{
transform.RotateAround(target.transform.position,Vector3.up,360f/10*Time.deltaTime);
//public void RotateAround(Vector3 point, Vector3 axis, float angle);
//axis : back, down, forward, left, one, right, up, zero
transform.LookAt(target.transform.position);
}
}
깜빡이는 빛
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BlickLight : MonoBehaviour
{
private Light target_light;
private float strong = 0; //빛 세기
[Range(0, 0.3f)]
public float blink_speed = 0; //깜박이는 속도
[Range(1, 10)]
public float light_strong = 1; //빛의 세기
void Start() //게임이 시작될때 1번
{
target_light = GetComponent<Light>();
//컴퍼넌트가져오기<Light>();
}
void Update()
{
target_light.intensity = (Mathf.Sin(strong)+1)* light_strong;
// strong 0~
// Mathf.Sin(strong) 0~1~0~-1~0~1~0~-1, -1~1
// Mathf.Sin(strong)+1 0~2
strong += blink_speed; //0.2씩 증가 (깜박이는 속도)
//strong = strong + 0.2f;
}
}
빛 제어하기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LightControl : MonoBehaviour
{
private Light my_light;
void Start()
{
my_light = gameObject.GetComponent<Light>();
lightOn();
}
public void lightOn(){
iTween.ValueTo(gameObject, iTween.Hash("from", 0, "to", 100, "onUpdate", "Counter", "delay", 0, "time", 2));
}
public void lightOff(){
iTween.ValueTo(gameObject, iTween.Hash("from", 100, "to", 0, "onUpdate", "Counter", "delay", 0, "time", 2));
}
private void Counter(int get_number)
{
my_light.intensity = (float)get_number/100*2;
}
}
빛 각도 조절하기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public void makeAngle(Vector3 target_angle){
//this.gameObject.transform.eulerAngles = target_angle;
iTween.RotateTo(this.gameObject, iTween.Hash("rotation",
target_angle, "easetype", iTween.EaseType.easeOutCubic, "time", 1.0f));
}
충돌체 충돌여부 파악하기
void OnCollisionEnter (Collision collision){
Debug.Log("Enter called");
}
void OnCollisionStay (Collision collision){
Debug.Log("Stay occurring..");
}
void OnCollisionExit (Collision collision){
Debug.Log("Exit called.");
}
충돌여부 파악하여 색 바꾸기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CollisionObject : MonoBehaviour
{
void OnCollisionEnter(Collision col){
//col 부딧힌 대상
Debug.Log("충돌시작");
Renderer self = GetComponent<Renderer>();
self.material.color = Color.red;
}
void OnCollisionStay(Collision col){
Debug.Log("충돌중");
}
void OnCollisionExit(Collision col){
Debug.Log("충돌끝");
Renderer self = GetComponent<Renderer>();
self.material.color = Color.white;
}
}
트리거를 이용하여 물체의 위치 파악하기
void OnTriggerEnter(Collider other) {
//Destroy(other.gameObject);
Debug.Log("trigger enter");
}
void OnTriggerStay(Collider other) {
Debug.Log("trigger stay");
}
void OnTriggerExit(Collider other) {
Debug.Log("trigger out");
}
Material을 이용하여 이미지 교체하기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MaterialChange : MonoBehaviour
{
public Material[] materials;
public int index = 0;
private Renderer myRenderer;
private void Start()
{
myRenderer = GetComponent<Renderer>();
}
private void OnMouseDown()
{
index++;
myRenderer.material = materials[index%2];
//index%2 = index를 2로 나눈뒤 남는 나머지값
}
}
물리적인 힘 추가하기
Rigidbody rb = GetComponent<Rigidbody>();
rb.AddForce(transform.up * 200);
rb.AddForce(transform.up * 200, ForceMode.Acceleration);
//질량을 무시하고, 리지드바디에(rigidbody)에 연속적인 가속력(Acceleration)을 가합니다.
//질량이 다른 두개 이상의 물체에 동일한 가속력을 가하고 싶다면 유용합니다.
//기본값은 ForceMode.Force 입니다.
- ForceMode : 힘을 가하는 방식
-
- Force : 질량을 포함한 가속
-
- Acceleration : 질량을 무시한 가속
-
- Impulse : 질량을 포함한 속도적용 (순간적 속도변화)
-
- VelocityChange : 질량을 무시한 속도적용 (순간적 속도변화)
- https://docs.unity3d.com/kr/530/ScriptReference/Transform.html
- forward : 월드 공간에서 트랜스폼의 파랑색 축(Z)을 나타냅니다.
- right : 월드 공간에서 트랜스폼의 빨간색 축을 나타냅니다.
- up : 월드 공간에서 트랜스폼의 초록색 축을 나타냅니다.
회전힘 추가하기
public float amount = 50f;
void FixedUpdate(){
Rigidbody rb = GetComponent<Rigidbody>();
float h = Input.GetAxis("Horizontal") * amount * Time.deltaTime;
float v = Input.GetAxis("Vertical") * amount * Time.deltaTime;
rb.AddTorque(transform.up * h);
rb.AddTorque(transform.right *v);
}
주사위 굴리기
void OnMouseDown()
{
Debug.Log("마우스 눌림");
myBody.AddForce(Vector3.up * 500); //위치 힘 추가하기
myBody.AddTorque(transform.right * 15);
myBody.AddTorque(transform.up * 20); //회전 힘 추가하기
//내 기준 윗쪽 transform.up
//월드 기준 윗쪽 Vector3.up
}