当前位置:   article > 正文

Unity中文教程网中Unity教程 C#中级编程_unity 对话和任务:中级 c# 游戏编码

unity 对话和任务:中级 c# 游戏编码

 

一、目的

1、想知道:Unity中文教程网中Unity教程 C#中级编程

https://learn.u3d.cn/tutorial/intermediate-gameplay-scripting#603f154d084785002045570e

 

二、参考

1、Unity教程 C#中级编程

https://learn.u3d.cn/tutorial/intermediate-gameplay-scripting#603f154d084785002045570e

  • 总结:good:很不错的Unity教程网站

 

三、操作+内容

1、创建属性

Player

  1. using UnityEngine;
  2. using System.Collections;
  3. public class Player
  4. {
  5. //成员变量可以称为
  6. //字段。
  7. private int experience;
  8. //Experience 是一个基本属性
  9. public int Experience
  10. {
  11. get
  12. {
  13. //其他一些代码
  14. return experience;
  15. }
  16. set
  17. {
  18. //其他一些代码
  19. experience = value;
  20. }
  21. }
  22. //Level 是一个将经验值自动转换为
  23. //玩家等级的属性
  24. public int Level
  25. {
  26. get
  27. {
  28. return experience / 1000;
  29. }
  30. set
  31. {
  32. experience = value * 1000;
  33. }
  34. }
  35. //这是一个自动实现的属性的
  36. //示例
  37. public int Health{ get; set;}
  38. }

 

  1. using UnityEngine;
  2. using System.Collections;
  3. public class Game : MonoBehaviour
  4. {
  5. void Start ()
  6. {
  7. Player myPlayer = new Player();
  8. //属性可以像变量一样使用
  9. myPlayer.Experience = 5;
  10. int x = myPlayer.Experience;
  11. }
  12. }
  • 总结:知道了变量当作属性使用,使用set、get

 

2.三元运算符

  1. using UnityEngine;
  2. using System.Collections;
  3. public class TernaryOperator : MonoBehaviour
  4. {
  5. void Start ()
  6. {
  7. int health = 10;
  8. string message;
  9. //这是一个三元运算的示例,其中根据
  10. //变量“health”选择一条消息。
  11. message = health > 0 ? "Player is Alive" : "Player is Dead";
  12. }
  13. }
  • 总结:平时代码少写点if else了

 

3.静态

方法一:

Enemy

  1. using UnityEngine;
  2. using System.Collections;
  3. public class Enemy
  4. {
  5. //静态变量是在类的所有实例之间
  6. //共享的变量。
  7. public static int enemyCount = 0;
  8. public Enemy()
  9. {
  10. //通过递增静态变量了解
  11. //已创建此类的多少个对象。
  12. enemyCount++;
  13. }
  14. }
  • 总结:静态变量是在类的所有实例之间共享的变量。       原来静态还可以这样;
  • 总结:public Enemy()    直接在构造函数中,增加了静态变量,实现数量自增;

Game

  1. using UnityEngine;
  2. using System.Collections;
  3. public class Game
  4. {
  5. void Start ()
  6. {
  7. Enemy enemy1 = new Enemy();
  8. Enemy enemy2 = new Enemy();
  9. Enemy enemy3 = new Enemy();
  10. //可以使用类名和点运算符
  11. //来访问静态变量。
  12. int x = Enemy.enemyCount;
  13. }
  14. }

 

方法二:

Player

  1. using UnityEngine;
  2. using System.Collections;
  3. public class Player : MonoBehaviour
  4. {
  5. //静态变量是在类的所有实例之间
  6. //共享的变量。
  7. public static int playerCount = 0;
  8. void Start()
  9. {
  10. //通过递增静态变量了解
  11. //已创建此类的多少个对象。
  12. playerCount++;
  13. }
  14. }

PlayerManager

  1. using UnityEngine;
  2. using System.Collections;
  3. public class PlayerManager : MonoBehaviour
  4. {
  5. void Start()
  6. {
  7. //可以使用类名和点运算符
  8. //来访问静态变量。
  9. int x = Player.playerCount;
  10. }
  11. }
  • 总结:全局静态变量

方法三

Utilities

  1. using UnityEngine;
  2. using System.Collections;
  3. public static class Utilities
  4. {
  5. //可以在没有类对象的情况下调用
  6. //静态方法。请注意,静态方法无法访问
  7. //非静态成员变量。
  8. public static int Add(int num1, int num2)
  9. {
  10. return num1 + num2;
  11. }
  12. }

UtilitiesExample

  1. using UnityEngine;
  2. using System.Collections;
  3. public class UtilitiesExample : MonoBehaviour
  4. {
  5. void Start()
  6. {
  7. //可以使用类名和点运算符
  8. //来访问静态方法。
  9. int x = Utilities.Add (5, 6);
  10. }
  11. }
  • 总结:静态类,整个工程都能调用了
  • 总结:可以在没有类对象的情况下调用 静态方法。请注意,静态方法无法访问 非静态成员变量。

 

4.方法重载

SomeClass

  1. using UnityEngine;
  2. using System.Collections;
  3. public class SomeClass
  4. {
  5. //第一个 Add 方法的签名为
  6. //Add(int, int)”。该签名必须具有唯一性。
  7. public int Add(int num1, int num2)
  8. {
  9. return num1 + num2;
  10. }
  11. //第二个 Add 方法的签名为
  12. //Add(string, string)”。同样,该签名必须具有唯一性。
  13. public string Add(string str1, string str2)
  14. {
  15. return str1 + str2;
  16. }
  17. }

SomeOtherClass

  1. using UnityEngine;
  2. using System.Collections;
  3. public class SomeOtherClass : MonoBehaviour
  4. {
  5. void Start ()
  6. {
  7. SomeClass myClass = new SomeClass();
  8. //具体调用的 Add 方法将取决于
  9. //传入的参数。
  10. myClass.Add (1, 2);
  11. myClass.Add ("Hello ", "World");
  12. }
  13. }
  • 总结:good:这个我已经会了,函数名字一样,参数不同

5.通用

方法一

SomeClass

  1. using UnityEngine;
  2. using System.Collections;
  3. public class SomeClass
  4. {
  5. //这是一个通用方法。注意通用
  6. //类型“T”。该“T”将在运行时替换为
  7. //实际类型。
  8. public T GenericMethod<T>(T param)
  9. {
  10. return param;
  11. }
  12. }

SomeOtherClass

  1. using UnityEngine;
  2. using System.Collections;
  3. public class SomeOtherClass : MonoBehaviour
  4. {
  5. void Start ()
  6. {
  7. SomeClass myClass = new SomeClass();
  8. //为了使用此方法,必须
  9. //告诉此方法用什么类型替换
  10. //“T”。
  11. myClass.GenericMethod<int>(5);
  12. }
  13. }
  • 总结:好像也叫做模板类,
  • 总结:public 同一个数据类型的返回值  函数名字<同一个数据类型的>(同一个数据类型的 参数)

方法二

GenericClass

  1. using UnityEngine;
  2. using System.Collections;
  3. //这是一个通用类。注意通用类型“T”。
  4. //“T”将被替换为实际类型,同样,
  5. //该类中使用的“T”类型实例也将被替换。
  6. public class GenericClass <T>
  7. {
  8. T item;
  9. public void UpdateItem(T newItem)
  10. {
  11. item = newItem;
  12. }
  13. }

GenericClassExample

  1. using UnityEngine;
  2. using System.Collections;
  3. public class GenericClassExample : MonoBehaviour
  4. {
  5. void Start ()
  6. {
  7. //为了创建通用类的对象,必须
  8. //指定希望该类具有的类型。
  9. GenericClass<int> myClass = new GenericClass<int>();
  10. myClass.UpdateItem(5);
  11. }
  12. }
  • 总结:public class GenericClass <T>      个人觉得:提前给类一个数据类型,类似C++中的初始化列表赋值,然后将这个数据类型使用在属性、函数参数类型中
  • 总结:

6.继承

Fruit 类

  1. using UnityEngine;
  2. using System.Collections;
  3. //这是基类,
  4. //也称为父类。
  5. public class Fruit
  6. {
  7. public string color;
  8. //这是 Fruit 类的第一个构造函数,
  9. //不会被任何派生类继承。
  10. public Fruit()
  11. {
  12. color = "orange";
  13. Debug.Log("1st Fruit Constructor Called");
  14. }
  15. //这是 Fruit 类的第二个构造函数,
  16. //不会被任何派生类继承。
  17. public Fruit(string newColor)
  18. {
  19. color = newColor;
  20. Debug.Log("2nd Fruit Constructor Called");
  21. }
  22. public void Chop()
  23. {
  24. Debug.Log("The " + color + " fruit has been chopped.");
  25. }
  26. public void SayHello()
  27. {
  28. Debug.Log("Hello, I am a fruit.");
  29. }
  30. }

Apple 类

  1. using UnityEngine;
  2. using System.Collections;
  3. //这是派生类,
  4. //也称为子类。
  5. public class Apple : Fruit
  6. {
  7. //这是 Apple 类的第一个构造函数。
  8. //它立即调用父构造函数,甚至
  9. //在它运行之前调用。
  10. public Apple()
  11. {
  12. //注意 Apple 如何访问公共变量 color,
  13. //该变量是父 Fruit 类的一部分。
  14. color = "red";
  15. Debug.Log("1st Apple Constructor Called");
  16. }
  17. //这是 Apple 类的第二个构造函数。
  18. //它使用“base”关键字指定
  19. //要调用哪个父构造函数。
  20. public Apple(string newColor) : base(newColor)
  21. {
  22. //请注意,该构造函数不会设置 color,
  23. //因为基构造函数会设置作为参数
  24. //传递的 color。
  25. Debug.Log("2nd Apple Constructor Called");
  26. }
  27. }
  • 总结:public Apple(string newColor) : base(newColor)     base这里指的就是Fruit类,并且低矮用Fruit(string newColor)

 

FruitSalad 类

  1. using UnityEngine;
  2. using System.Collections;
  3. public class FruitSalad : MonoBehaviour
  4. {
  5. void Start ()
  6. {
  7. //让我们用默认构造函数
  8. //来说明继承。
  9. Debug.Log("Creating the fruit");
  10. Fruit myFruit = new Fruit();
  11. Debug.Log("Creating the apple");
  12. Apple myApple = new Apple();
  13. //调用 Fruit 类的方法。
  14. myFruit.SayHello();
  15. myFruit.Chop();
  16. //调用 Apple 类的方法。
  17. //注意 Apple 类如何访问
  18. //Fruit 类的所有公共方法。
  19. myApple.SayHello();
  20. myApple.Chop();
  21. //现在,让我们用读取字符串的
  22. //构造函数来说明继承。
  23. Debug.Log("Creating the fruit");
  24. myFruit = new Fruit("yellow");
  25. Debug.Log("Creating the apple");
  26. myApple = new Apple("green");
  27. //调用 Fruit 类的方法。
  28. myFruit.SayHello();
  29. myFruit.Chop();
  30. //调用 Apple 类的方法。
  31. //注意 Apple 类如何访问
  32. //Fruit 类的所有公共方法。
  33. myApple.SayHello();
  34. myApple.Chop();
  35. }
  36. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/103935
推荐阅读
相关标签
  

闽ICP备14008679号