C#在Unity中的基础句式

2016年11月29日 13:41 1 点赞 0 评论 更新于 2025-11-21 14:06

父子节点相关操作

基本属性和方法

  • parent 变量:表示 Transform 的父节点。
  • root 属性:表示该 Transform 的根节点。若没有父节点,会返回其自身。
  • Transform Find(string name) 方法:根据名字查找子节点。
  • bool IsChildOf(Transform node) 方法:判断该 Transform 是否为某 Transform 的子节点。
  • void DetachChildren() 方法:解除所有子节点的父子关系。

示例代码

// 查找父节点
Transform parentTransform = transform.parent;
// 查找根节点
Transform rootTransform = transform.root;
// 根据名字查找子节点
Transform childTransform = transform.Find("ChildName");
// 判断是否为子节点
bool isChild = transform.IsChildOf(someTransform);
// 解除所有子节点的父子关系
transform.DetachChildren();

物体查找与显示操作

通过名字查找物体

  • GameObject.Find("Player"):通过名字查找场景中的 GameObject

    通过名字寻找物体子集

  • transform.Find("物体子集名字"):在当前 Transform 的子节点中根据名字查找 Transform

    显示和隐藏物体

  • gameObject.SetActive(true):设置物体的激活状态,true 为显示,false 为隐藏。

    使用和关闭物体代码

  • gameObject.GetComponent<代码名字>().enabled = true:启用或禁用 GameObject 上的组件。

示例代码

// 通过名字查找物体
GameObject player = GameObject.Find("Player");
// 通过名字查找物体子集
Transform child = transform.Find("ChildObject");
// 显示物体
gameObject.SetActive(true);
// 启用组件
gameObject.GetComponent<SomeComponent>().enabled = true;

输入事件相关操作

鼠标按键事件

  • if (Input.GetMouseButton(0)):判断鼠标左键是否处于按下状态。
  • if (Input.GetMouseButtonDown(0)):判断鼠标左键是否刚被按下。
  • if (Input.GetMouseButtonUp(0)):判断鼠标左键是否刚被抬起。

鼠标相关函数

  • Input.mousePosition:表示鼠标当前的像素位置,以屏幕左下角为原点。
  • GetMouseButton:对应的键处于按下状态时返回 true
  • GetMouseButtonDown:对应的键被按下时返回 true
  • GetMouseButtonUp:对应的键弹起时返回 true

鼠标回调函数

  • OnMouseDown:当鼠标点击到对象时回调。
  • OnMouseDrag:当鼠标拖拽对象时调用,在 Ignore Raycast 层上无效。
  • OnMouseEnter:当鼠标进入对象时调用。
  • OnMouseExit:当鼠标离开对象时调用。
  • OnMouseOver:当鼠标停留在对象上面时调用。
  • OnMouseUpAsButton:鼠标在同一个对象上按下并弹起时调用。
  • OnMouseUp:与 OnMouseUpAsButton 类似。

示例代码

// 鼠标按键事件
if (Input.GetMouseButton(0))
{
// 左键按下时执行的代码
}
if (Input.GetMouseButtonDown(0))
{
// 左键刚按下时执行的代码
}
if (Input.GetMouseButtonUp(0))
{
// 左键刚抬起时执行的代码
}

// 鼠标回调函数
void OnMouseDown()
{
// 鼠标点击对象时执行的代码
}

物体移动与位置相关操作

物体水平匀速移动

  • transform.Translate(-0.1f * Time.deltaTime, 0, 0):使物体在水平方向上匀速移动。

位置相关的 Vector3 类型变量

  • up:表示世界坐标的 Y 轴方向。
  • right:表示世界坐标的 X 轴方向。
  • forward:表示世界坐标的 Z 轴方向。
  • position:表示对象在世界坐标系中的位置。
  • localPosition:表示对象相对父节点变换的坐标位置。

示例代码

// 物体水平匀速移动
transform.Translate(-0.1f * Time.deltaTime, 0, 0);
// 获取位置相关信息
Vector3 worldUp = Vector3.up;
Vector3 worldRight = Vector3.right;
Vector3 worldForward = Vector3.forward;
Vector3 worldPosition = transform.position;
Vector3 localPosition = transform.localPosition;

物体颜色与旋转相关操作

改变物体颜色

  • obj.renderer.material.color = Color.red:将物体的材质颜色设置为红色。

旋转相关的 Quaternion 类型变量

  • rotation:在世界坐标系中的旋转角度,是一个 Quaternion 对象(四元数)。
  • localRotation:相对于父节点的旋转角度。

示例代码

// 改变物体颜色
Renderer renderer = obj.GetComponent<Renderer>();
if (renderer != null)
{
renderer.material.color = Color.red;
}
// 设置旋转角度
Quaternion worldRotation = transform.rotation;
Quaternion localRotation = transform.localRotation;

距离计算与动画操作

两个物体之间的距离

  • float Distance = Vector3.Distance(position1, position2):计算两个 Vector3 位置之间的距离。

动画操作

  • Animation.Rewind():倒回播放动画。
  • Animation.Stop():停止所有动画。
  • Animation.Stop("动画名字"):停止指定名称的动画。
  • Animation.wrapMode = WrapMode.loop:使用动画循环模式。
  • animation.Play(); yield WaitForSeconds(animation.clip.length):等待动画播放完成。
  • print(animation["动画名字"].length):打印动画长度。

示例代码

// 计算两个物体之间的距离
float distance = Vector3.Distance(object1.transform.position, object2.transform.position);
// 动画操作
Animation anim = GetComponent<Animation>();
if (anim != null)
{
anim.Rewind();
anim.Stop();
anim.Stop("AnimationName");
anim.wrapMode = WrapMode.loop;
anim.Play();
yield return new WaitForSeconds(anim.clip.length);
print(anim["AnimationName"].length);
}

数组操作与关卡切换

数组操作

int arrayLength = 0;
foreach (Texture2D[] ta in 当前数组)
{
arrayLength += ta.Length; // 加载数组的长度
}

关卡切换时保留对象

  • DontDestroyOnLoad(this):在切换关卡时,保留脚本所赋予的对象。

循环语句区别

  • while 循环:先判断条件,再执行语句,可能执行 0 次。
  • do while 循环:先执行语句,再判断条件,至少执行 1 次。

示例代码

// while 循环
int i = 0;
while (i < 10)
{
// 执行语句
i++;
}

// do while 循环
int j = 0;
do
{
// 执行语句
j++;
} while (j < 10);

以上是 C# 在 Unity 中的一些基础句式和操作,希望对你有所帮助。