unity之让obj旋转自转等操作
Posted huang--wei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity之让obj旋转自转等操作相关的知识,希望对你有一定的参考价值。
1.让cube沿着矩形四个点运动
using System.Collections; using System.Collections.Generic; using UnityEngine; public class cube : MonoBehaviour { // Use this for initialization private Vector3 vec; float time = 0; void Start () { vec = transform.position;//存取坐标 } int speed = 1; float speed2 = 0; // bool b = true; // Update is called once per frame void Update () { //time += Time.deltaTime;//计时器 //移动 transform.localScale = new Vector3(1,1,1); transform.Translate(new Vector3(0.02f * speed, 0, speed2)); if (transform.position.x >=4) { speed = 0; speed2 = -0.02f; } if (transform.position.z<- 4) { speed = -1; speed2 = 0; } if (transform.position.x < -4) { speed = 0; speed2 = 0.02f; } if (transform.position.z >0) { transform.position = vec; speed = 1; speed2 = 0; } //transform.Rotate(0, speed, 0); } }
2.cube之按键操作
//transform.Rotate(Vector3.right,50,Space.World); 自转// transform.RotateAround(Vector3.right,5);//只有世界坐标下的运动 transform.RotateAround(Vector3.zero,Vector3.up,5);//围绕别人转 //if (Input.GetKey("w")) //{s // transform.Translate(Vector3.forward);//局地坐标(相对坐标)(0,0,1) //} //if (Input.GetKey("s")) //{ // transform.Translate(Vector3.back);//世界坐标,绝对坐标(0,0,-1) //} //if (Input.GetKey("a")) //{ // transform.Rotate(Vector3.down);//(0,-1,0) //} //if (Input.GetKey("d")) //{ // transform.Rotate(Vector3.up);//(0,1,0) //} // transform.Translate(Vector3.right);//(1,0,0) // transform.Translate(Vector3.left);//(-1,0,0) //if (Input.GetKey(KeyCode.W)) //{ // Debug.Log("摁下了W键"); //} //if (Input.GetKeyDown(KeyCode.W)) //{ // Debug.Log("Down了一下"); //} //if (Input.GetKeyUp(KeyCode.W)) //{ // Debug.Log("Up了一下"); //} //if (Input.GetKey(KeyCode.Space)) //{ // Debug.Log("摁下了空格键"); //} //if (Input.GetKeyDown(KeyCode.Space)) //{ // Debug.Log("Down了一下"); //} //if (Input.GetKeyUp(KeyCode.Space)) //{ // Debug.Log("Up了一下"); //} //if (Input.GetMouseButton(0)) //{ // print("持续摁下了鼠标左键"); //} //if (Input.GetMouseButtonDown(0)) //{ // print("摁下了鼠标左键"); //} //if (Input.GetMouseButtonUp(0)) //{ // print("抬起了鼠标左键"); //} //if (Input.GetMouseButton(1)) //{ // print("摁下了鼠标右键"); //} //if (Input.GetMouseButton(2)) //{ // print("摁下了鼠标中键"); //}
3.射线检测
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit;//检测信息 if (Physics.Raycast(ray,out hit)) { print(hit.point); if (hit.collider.name == "Cube") { hit.collider.gameObject.GetComponent<MeshRenderer>().material.color = Color.red; } }
4.cube岁鼠标移动
public GameObject obj; Vector3 pos; bool b = false; // Use this for initialization void Start () { } // Update is called once per frame void Update () { // transform.LookAt(obj.transform); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit;//检测信息 if (Physics.Raycast(ray, out hit)) { if (Input.GetMouseButtonDown(0)) { pos = hit.point; transform.LookAt(new Vector3(pos.x, pos.y + 0.5f, pos.z));//lookat b = true; } } if (b) { transform.Translate(0,0,5*Time.deltaTime); if (Vector3.Distance(transform.position,pos)<1f) { b = false; print(123); } } }
5.
点击cube随机变颜色,掉下去 using System.Collections; using System.Collections.Generic; using UnityEngine; public class RayDiao : MonoBehaviour { GameObject obj; // Use this for initialization void Start () { } Color[] gameclor = { Color.black, Color.blue, Color.cyan, Color.green, Color.red, Color.yellow };//定义颜色数组 //Random num = new Random(); // Update is called once per frame void Update () { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit;//检查信息 if (Physics.Raycast(ray,out hit)) { if (Input.GetMouseButtonDown(0))//判断是否点击了鼠标左键 { if (hit.collider.tag.Equals("cube"))//判断是否点击的是cube { hit.collider.gameObject.GetComponent<MeshRenderer>().material.color = gameclor[Random.Range(0, gameclor.Length)];//随机添加颜色 //hit.collider.gameObject.GetComponent<Rigidbody>().useGravity = true;//使添加的刚体激活 hit.collider.gameObject.AddComponent<Rigidbody>();//增加刚体 // obj= hit.collider.gameObject; } } } //if (obj != null)//不是空 //{ // obj.transform.Translate(0, -1*Time.deltaTime, 0);//以(-1*Time.deltaTime)的速度下降 //} } }
6.
添加cube的方法,如消消乐 using System.Collections; using System.Collections.Generic; using UnityEngine; public class creatCube : MonoBehaviour { //public GameObject cube; // Use this for initialization Color [] c = { Color.black, Color.blue, Color.clear, Color.cyan, Color.green, Color.red, Color.yellow }; void Start () { /* GameObject obj = Instantiate(Resources.Load("Cube")) as GameObject;*///另一种生成cube方法 //GameObject obj = Instantiate(cube);//第二种方式生成cube,需要预制体 //GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube);//生成cube // obj.transform.position = Vector3.one;//one表示坐标(1,1,1) //obj.transform.rotation = Quaternion.Euler(0, 45, 0);//角度设置 // obj.transform.localScale = new Vector3(2, 2, 2);//大小设置 //int index =obj.name.IndexOf("(");//字符串截取 //obj.name=obj.name.Substring(0, index); for (int i = 0; i<10; i++) { for (int j = 0; j < 10; j++) { GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube);//生成cube obj.transform.position = new Vector3(i, j, 0);//生成位置 obj.transform.localScale = new Vector3(0.9f, 0.9f, 0.9f);//生成大小 obj.GetComponent<MeshRenderer>().material.color = c[Random.Range(0, c.Length)];//随机颜色 } } } // Update is called once per frame void Update () { } }
7.
鼠标点击变大 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.tag == "cube" &&Input.GetMouseButtonDown(0)) { cubeObj= hit.collider.gameObject; cubeObj.transform.localScale = new Vector3(1,1,1); } } if (Input.GetMouseButtonUp(0)&&cubeObj) { cubeObj.transform.localScale = new Vector3(0.9f, 0.9f, 0.9f); }
8.
消消乐--单消————列表方法 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Raydaxiao : MonoBehaviour { GameObject obj; public GameObject cube;//为预制体生成cube做准备 //Color[] c = { Color.black, Color.blue, Color.clear, Color.cyan, Color.green, Color.red, Color.yellow }; public Material[] color;//材质数组 Vector3 vec; List<GameObject> cubelist = new List<GameObject>(); //int num = 0; // Use this for initialization void Start () { for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { GameObject obj = Instantiate(cube);//需要预制体式添加cube obj.transform.position = new Vector3(i, j, 0); obj.transform.localScale = new Vector3(0.9f, 0.9f, 0.9f); //obj.GetComponent<MeshRenderer>().material.color = c[Random.Range(0, c.Length)];//上颜色 obj.GetComponent<MeshRenderer>().material = color[Random.Range(0, color.Length)];//随机材质 obj.tag = "cube";//定义名字为cube //obj.AddComponent<Rigidbody>();//添加刚体 //num++; //obj.name = "Cube" + num;//生成不同名字的cube cubelist.Add(obj); } } } // Update is called once per frame void Update () { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if(Physics.Raycast(ray,out hit)) { if (hit.collider.gameObject.tag=="cube"&&Input.GetMouseButtonDown(0)) { obj = hit.collider.gameObject; obj.transform.localScale = new Vector3(1, 1, 1); vec = obj.transform.position;//获取当前cube的坐标 //Destroy(obj);//销毁cube Destroy(obj); cubelist.Remove(obj); foreach (GameObject item in cubelist) { if (item.transform.position.x == vec.x && item.transform.position.y > vec.y) { //item.transform.position -= new Vector3(0, 1, 0);//另一种 item.transform.position = new Vector3(vec.x, item.transform.position.y - 1, vec.z); }//自动补齐 } GameObject newobj = Instantiate(cube);//重新生成cube newobj.GetComponent<MeshRenderer>().material = color[Random.Range(0, color.Length)];//添加颜色 newobj.transform.position = new Vector3(vec.x, 9, vec.z);//newcube的坐标 newobj.transform.localScale = new Vector3(0.9f, 0.9f, 0.9f); //newobj.AddComponent<Rigidbody>();//添加刚体 //newobj.GetComponent<Rigidbody>().freezeRotation = true; //newobj.GetComponent<BoxCollider>().size = new Vector3(1.1f, 1.1f, 1.1f); cubelist.Add(newobj); } //if (Input.GetMouseButtonUp(0)&&obj) //{ // obj.transform.localScale = new Vector3(0.9f,0.9f,0.9f); //} } } }
9.
消消乐--单消--数组方法 using System.Collections; using System.Collections.Generic; using UnityEngine; public class TextScripts : MonoBehaviour { // List<GameObject> list = new List<GameObject>(); GameObject[,] array = new GameObject[10,10]; bool b = false; GameObject cube; Color[] c = { Color.red,Color.blue,Color.yellow,Color.green}; public Material[] m; // Use this for initialization void Start() { for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube); obj.transform.position = new Vector3(i, j, 0); obj.transform.localScale = new Vector3(0.9f, 0.9f, 0.9f); obj.tag = "cube"; obj.GetComponent<MeshRenderer>().material = m[Random.Range(0,3)]; array[i, j] = obj; } } } // Update is called once per frame void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray,out hit)) { if (hit.collider.tag=="cube"&&Input.GetMouseButtonDown(0)) { cube = hit.collider.gameObject; Vector3 pos = cube.transform.position; int a = (int)pos.x; int b = (int)pos.y; Destroy(cube); for (int i = b+1; i < 10; i++)//从销毁的上边第一个开始 { array[a, i].transform.position -= new Vector3(0,1,0);/到比销毁物体坐标的y大的物体把其y-1 array[a, i - 1] = array[a,i];//坐标统一减去1,导致索引对应物体改变 } GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube); obj.transform.position = new Vector3(pos.x, 9, 0); obj.transform.localScale = new Vector3(0.9f, 0.9f, 0.9f); obj.tag = "cube"; obj.GetComponent<MeshRenderer>().material = m[Random.Range(0, 3)]; // list.Add(obj); array[a, 9] = obj; } } } }
10.
技能冷却: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class CoolSkill : MonoBehaviour { public Image image; float time; float f; public Text text; bool b = false; bool bb = true; // Use this for initialization void Start() { image = image.GetComponent<Image>(); text = text.GetComponent<Text>(); image.fillAmount = 0;//默认可以发出技能 } public void GetBool() { if (bb)//限制技能开启后才能使用 { b = true; bb = false; } } // Update is called once per frame void Update() { if (b) { time += Time.deltaTime; if (time <= 5)//技能控制在5秒冷却 { f = (5 - time);//5秒倒计时 image.fillAmount = (f) / 5;//image也在360度递减 text.text = (f).ToString();//文本输出倒计时 if (f < 0.1f && f >= 0)/控制在0.1秒以内结束时才可以重新开启技能 { bb = true;//重新开启技能Button可以点击了 } } else { time = 0;//超过5秒后时间置零 b = false;/tton点击后又可以计时了 } } } }
以上是关于unity之让obj旋转自转等操作的主要内容,如果未能解决你的问题,请参考以下文章
csharp Unity C#片段用于将变换旋转到新的相对旋转数秒