zoukankan      html  css  js  c++  java
  • 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点击后又可以计时了
                }
    
    
            }
    
        }
    }
    莫说我穷的叮当响,大袖揽清风。 莫讥我困时无处眠,天地做床被。 莫笑我渴时无美酒,江湖来做壶。
  • 相关阅读:
    POJ1422 Air Raid 【DAG最小路径覆盖】
    Android studio ElasticDownloadView
    POJ 1753 Flip Game
    Ogre嵌入MFC傻瓜全然教程(三)
    你的水桶有多满
    uva 10581
    map 解析
    In-Out Parameters inout keyword
    Associated Values & enum
    函数式编程 归档
  • 原文地址:https://www.cnblogs.com/huang--wei/p/9534284.html
Copyright © 2011-2022 走看看