最新文章
泰课在线 | 微信拼团成功后如何获取课程?
08-09 17:57
Unity教程 | 使用ARKit为iOS开发AR应用
07-31 17:23
Unity Pro专业版7折订阅四选一工具包之VR开发与艺术设计
07-28 11:47
网友使用虚幻UE4实现CAVE 多通道立体渲染的沉浸式环境
07-27 11:57
VR晕动症调查:未来5年内大部分VR晕动症将得到解决
07-27 11:26
AMD CEO:未来3-5年最重要 希望5年达1亿VR用户
07-27 10:44
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 中的一些基础句式和操作,希望对你有所帮助。