随风学习笔记_01

01、碰撞检测
两物体上都加了碰撞器(Collider),且至少其中一个添加了刚体(Rigidbody)组件才能
被检测到。
 //自动调用
    private void OnCollisionEnter(Collision collision)
    {
        print("OnCollisionEnter");
        //碰撞信息检测
        print(collision.collider);
        print(collision.collider.name);
        print(collision.collider.tag);
    }
    private void OnCollisionStay(Collision collision)
    {
        print("OnCollisionStay");
    }
    private void OnCollisionExit(Collision collision)
    {
        print("OnCollisionExit"); 
    }
02、触发检测
勾选碰撞器(Collider)组件中的"Is Trigger",碰撞器就变成了触发器了(加了触发器
的物体其他物体可进入其内部,加了碰撞器的物体与其他物体接触会发生碰撞,无法进
入物体内部)
//自动调用
    private void OnTriggerEnter(Collider other)
    {
        //触发信息检测
        print("OnTriggerEnter:" + other);
        print(other.name);
        print(other.tag);
    }
    private void OnTriggerStay(Collider other)
    {
        print("OnTriggerStay:" + other);
    }
    private void OnTriggerExit(Collider other)
    {
        print("OnTriggerExit:" + other);
    }
03、光照贴图(Lightmapping)

如果不使用光照贴图,光源对场景的影响是需要实时计算的,较耗费性能,使用Lightmapping光照信息会被提前计算好,然后烘培成一个贴图,把贴图放到模型上,就不用实时计算了。

1、Unity--->Window--->Rendering--->Lighting Settings;
2、把所有灯光勾选"Static";
3、所有灯光--->Inspector--->Light--->Mode--->选择Baked;
4、点击"Generate Lighting"进行烘培(每次修改需重新烘培)
5、此时禁用所有灯光,场景中光源对场景的影响依然存在。
04、不同类属性的调用

调用类属性需“public”,unity中创建C#脚本,生成的类为主类,脚本中自己又创建的类为副类。

public class LearnCSharp : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Enemy ene1 = new Enemy();
        ene1.name = "enemy1";
    }
}
class Enemy
{
    public string name;
    float hp = 80;
}
05、枚举的使用
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//enum RoleType:byte   //默认为int,可修改为其他类型
enum RoleType
{
    shooter,//射手  默认代表整数0
    master,//法师   默认代表整数1
    warrior//战士   默认代表整数2
}
public class LearnCSharp : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        RoleType playerRoleType = RoleType.shooter;
        //int num = (int)playerRoleType;//显性转换成角色类型代表的整数
        if (playerRoleType == RoleType.master)
        {
            print("玩家角色为法师");
        } 
        else if (playerRoleType == RoleType.shooter)
        {
            print("玩家角色为射手");
        }
        else
        {
            print("玩家角色为战士");
        } 
    }
}
//switch case标准用法,此处和用else if效果一样
        RoleType playerRoleType = RoleType.shooter;
        switch (playerRoleType)
        {
            case RoleType.shooter:
                print("玩家角色为射手");
                break;
            case RoleType.master:
                print("玩家角色为法师");
                break;
            case RoleType.warrior:
                print("玩家角色为战士");
                break;
            default:
                print("都不满足");
                break;
06、for循环和while循环和foreach遍历
void Start()
    {
        Transform[] des = transform.GetComponentsInChildren<Transform>();
        //for循环用法
        //for(int i = 0; i < des.Length; i++)
        //{
        //    if (des[i] != transform)
        //    {
        //        print(i);
        //        GameObject.Destroy(des[i].gameObject);
        //    }
        //}
        //while循环用法
        //int i = 0;
        //while (i<des.Length)
        //{
        //    if (des[i] != transform)
        //    {
        //        print(i);
        //        GameObject.Destroy(des[i].gameObject);
        //    }
        //    i++;
        //}
        //foreach遍历   t代表遍历的每一个元素
        foreach(Transform t in des)
        {
            if (t != transform)
            {
                print(t);
                GameObject.Destroy(t.gameObject);
            }
        }
    }
07、组件(物体)的禁用和激活
        box.enabled = false;    //false或true
        go.SetActive(false);
08、结构体
using System;

namespace CSharpLearn
{
    struct Posion
    {
        public float x;
        public float y;
        public float z;   
    }
    class Program
    {
        static void Main(string[] args)
        {

            Posion playerPos;
            playerPos.x = 10.5f;
            Posion enemyPos;
            enemyPos.y = 2.6f;
            
            Console.ReadKey();
        }
    }
    
}
using System;
/*
    示例2:
    定义一个表示路径的结构,路径有一个方向和距离组成(假定方向只有东西南北)
 */
namespace CSharpLearn
{
    struct Route
    {
        public Dir direction;
        public float distance;
    }
    
    enum Dir
    {
        east,
        west,
        south,
        north
    }
    class Program
    {
        static void Main(string[] args)
        {
            Route playerRou;
            playerRou.direction = Dir.east;
            playerRou.distance = 1000;
            
            Console.ReadKey();
        }
    }
    
}
09、使用Array.sort和冒泡排序算法(依次和后一位比较,前面大于后面位置互换,前面小于后面位置不变,每轮确定最后一个数是最大的)

示例:编写一个控制台程序,要求用户输入一组数字,用空格隔开,对用户输入的数字从小到大排列

            string str= Console.ReadLine();
            string[] strArray = str.Split(' ');
            int[] numArray = new int[strArray.Length];
            for (int i = 0; i < strArray.Length; i++)
            {
                numArray[i] = Convert.ToInt32(strArray[i]);
                Console.WriteLine(numArray[i]);
            }
            //第一种
            //Array.Sort(numArray);   //使用CLR给我们提供的方法进行排序(快速排序算法)
            //第二种   冒泡排序
            for(int l = 0; l < numArray.Length - 2; l++)
            {
                for (int k = 0; k < numArray.Length - 1; k++)
                {
                    if (numArray[k] > numArray[k + 1])
                    {
                        int tem = numArray[k];
                        numArray[k] = numArray[k + 1];
                        numArray[k + 1] = tem;
                    }
                }
            }
            //输出
            for (int j = 0; j < numArray.Length; j++)
            {
                Console.Write(numArray[j] + " ;");
            }
            Console.ReadKey();
10、示例

有n个整数,已经按照从小到大的顺序排列好,现在用户输入一个整数,请将该数插入到序列中,并使新的数列仍然有序。

            //原数组
            int[] array = { 3, 15, 78, 156, 788, 996, 4067 };
            int index = 0;
            Console.WriteLine("请输入一个数字");
            int userInput = Convert.ToInt32(Console.ReadLine());
            bool insert = false;   //判断是否插入,默认为false
            //插入后新数组
            int[] newArray = new int[array.Length + 1];
            for(int i = 0; i < newArray.Length; i++)
            {
                //当插入值为newArray数组最后位置
                if (i == array.Length && insert == false)   
                {
                    newArray[newArray.Length - 1] = userInput;
                    insert = true;
                }
                else if (userInput <= array[index]&&insert==false)
                {
                    newArray[i] = userInput;
                    insert = true;
                }
                else
                {
                    newArray[i] = array[index];
                    index++;
                }
            }
            //输出对比
            Console.WriteLine("插入前");
            for (int i = 0; i < array.Length; i++)
            {
                Console.Write(array[i] + " ;");
            }
            Console.WriteLine();
            Console.WriteLine("插入后");
            foreach (int num in newArray)
            {
                Console.Write(num + " ;");
            }
            Console.ReadKey();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值